我想计算有多少对自然数,使得 2 + b 2 = c 2 。作为我的函数的输入,我有c
。
我的想法是首先检查条件是否满足,如果没有,我想要循环迭代所需的表达式c
。如果结果等于c
的平方而不是我想要的count++
。问题是为什么这不起作用?
添加了一些更正。
int sum(int c) {
int b=1;
int a=1;
int count=0;
int result;
if (a*a + b*b != c*c)
{
for (int i=1; i<=c; i++)
{
b=i;
result = a*a + b*b;
if (result == c*c)
count++;
}
a++;
}
else
count++;
return count;
}
问题是我仍然不明白为什么这不想工作。
我的第二个想法是用while循环接近它:
int sum(int c) {
int b=1;
int a=1;
int count=0;
int result;
if (a*a + b*b != c*c)
{
while(b<=c)
{
result = a*a + b*b;
if (result == c*c)
{count++;
b++;
}
else
b++;
}
a++;
}
else
count++;
return count;
}
效果不佳。
有人想知道如何让它发挥作用?这两个版本中的任何一个?也许有提示?
答案 0 :(得分:2)
问题是你正在使用if
期望它像循环一样工作。在a
的底部,您正在递增if
,但因为它是while
而不是for
或a
,所以它不会跳转回到顶端。
b
和for (a=1; a<=c; a++) {
for (b=a; b<=c; b++) {
if (a*a + b*b == c*c) {
count++;
}
}
}
都需要更改,因此您需要一个循环来控制每个。
b
请注意,a
从当前值newNode -> data = malloc((1 + strlen(str)) * sizeof(char));
newNode -> data = str;
开始,而不是1.这样,您不会尝试两次相同的数字(只是切换)。