【c语言】本题要求对任意给定的正整数N,求方程X^2+Y^2=N的全部正整数解

#include<stdio.h>
main()
{
int n,x = 1,y = 1,i = 0;

scanf("%d",&n);

for(;x < n;x++)
{
for(y=x+1;y < n;y++)//for(;y < n;y++), if(x*x+y*y==n && x<=y)就不行
{
if(x*x+y*y==n)
{printf("%d %d\n",x,y);
i++;}
}
}
if(i == 0) printf("No Solution");
}
如程序,为什么改成注释里的代码就是错的呢

因为在上一次循环里面y值已经改变
也就是说除了第一次的x循环里面,y都是从n开始的,当然不对
要改成注释里面的,那每次把y初始化为1就行了
for(y=1;y<n;y++)
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-03-13
在正确的程序中,两个for循环的含义是:利用穷举法列出所有的答案,首先固定x为某一个值,然后让y从小开始列举出所有数,找出符合条件的x、y,然后增加x的值,再列举出y所有的数....循环完所有的x,也就遍历所有数据。
错误的程序中,x<=y这个条件不应当使用,没有意义,限制了许多范围。
正确的程序中,y=x+1直接写成y就可以了,要不就丢掉了x=y的可能,也就是抛弃了圆。

【c语言】本题要求对任意给定的正整数N,求方程X^2+Y^2=N的全部正整数...
也就是说除了第一次的x循环里面,y都是从n开始的,当然不对 要改成注释里面的,那每次把y初始化为1就行了 for(y=1;y<n;y++)

简单C语言题:求x²+y²=1000,所有正整数的解:
double x,y;for(y=0;y>=0&&y<=31;y++){ x=sqrt(1000-pow(y,2));if((int)x==x)printf("x=%d,y=%d\\n",(int)x,(int)y);} return 0;}

用C语言编写程序从键盘输入一个正整数数n,输出n!
printf("请输入一个正整数:");scanf("%d", &n);result = factorial(n);printf("%d! = %d\\n", n, result);return 0;} 递归函数`factorial`根据定义,当n小于或等于1时返回1,否则返回n乘以(n-1)的阶乘。在主函数`main`中,读取用户输入的n,然后调用`factorial`计算n的阶乘并输出结果。

如何用C语言编写程序输入一个正整数n,编程序输出从2到n间的所有完数...
C语言实现如下:include<stdio.h>void main(){int i,j,k,n;scanf("%d",&n); \/\/输入一个正整数nfor(i=2;i<=n;i++){k=0;for(j=1;j<=i-1;j++)if(i%j==0) k+=j;if(k==i) printf("%d\\n",i);\/\/判断i的所有真因子之和是否等于i,是则输出i。}}注意:建议n的取值...

我这有C语言的题,哪位大侠能解决一下,必有重谢!
C:6D:2 A B C D 6、若二维数组定义为a[m][n],则在a[i][j]之前的元素个数为( )。本题(1分)A:j*m+iB:i*m+jC:i*m+j-1D:j*m+i-1 A B C D 7、当a=2,b=3,c=4,d=5时, 执行下面一段程序后x的值为( )。if(ad)x=1 ; else if(a>c) if(b<d)x=2 ; else x=3...

求方程X平方+2Y平方=1979的正整数解
显然x是奇数,x^2=1(mod4)就是x^2-1能被4整除,而1979=3(mod4),从而y^2=1(mod4),从而y也是奇数,所以 y^2=(1979-x^2)\/2,显然1979<45^2,所以x取值1,3,5...43,从大到小依次带入得:x=27,y=25;仅一解

有没c++的题集及答案
2、倒勾股数是满足公式: 1\/A^2+1\/B^2=1\/C^2 的一组正整数(A,B,C),例如,(156,65,60)是倒勾股数,因为:1\/156^2+1\/65^2=1\/60^2。假定A>B>C,且要求A,B,C均小于或等于100,求满足倒勾股数公式的各组正整数(A,B,C)中C值的和是多少?3、倒勾股数是满足公式: 1\/A^2+1\/B^2=1\/C^2 ...

用c语言怎样编写n个数以内的完全数的程序
完全数是指所有真因子之和等于该数本身的正整数。可以使用以下C语言代码来找出小于等于n(n为正整数)的完全数:```c include <stdio.h> int main() { int n, i, j, sum;printf("请输入一个正整数n:");scanf("%d", &n);for (i = 1; i <= n; ++i) { sum = 0;for (j =...

急求,用C语言实现N阶螺旋数字方阵,谢谢
2. 编程,计算并输出方程X2+Y2=1989的所有整数解。3. 编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。4. 一个数如恰好等于它的因子之和,这个数就称为“完数”。编程序找出1000以内的所有完数,并输出其因子(6是一个"完数",它的因子是1,2,3)。5. 输入一个正整数,...

c语言如何输入一个正整数N,再输入N个整数,按从小到大的顺序输出?
c语言如何输入一个正整数N,再输入N个整数,按从小到大的顺序输出? #include<stdio.h> void main() { int n,i,j,t,a[10000]; printf("请输入正整数N:"); scanf("%d",&n); printf("请依次输入%d个数",n); for(i=0;i<n;i++) { printf("请输入第%d个数",i+...

相似回答