我想用C语言写一个代码,只使用嵌套的while ()
循环,输出一个在正整数范围内与勾股三元组匹配的三元组列表(a2 = b2 + c2,a,b和c ∈ +)。
我写的是这样的:
//Programme to output possible Pythagorean triples in a range of unsigned integers.
#include <stdio.h>
int main(void) {
unsigned int i = 1, j = 1, ij = 1;
puts("\n***To calculate Pythag. triple integers...***\n");
while (i <= 250) {
while (j <= 250) {
while (ij <= 250) {
if (ij * ij == i * i + j * j) {
printf ("Candidate triple: (%u, %u, %u)\n", ij, i, j);
}
++ij;
}
++j;
}
++i;
}
return 0;
}
它不起作用。它只显示第一个puts()
函数中的文本。
输出:
我犯了什么错?
2条答案
按热度按时间7lrncoxx1#
在i=1,j=1,ij=251的循环结束后,你永远不会再进入最内层的循环,因为你永远不会把
ij
设置回1
,j
也是如此。已修复:
我们通常这样写:
这仍然是一个while循环,但使用了
for
关键字/语法。请注意,预先计算250个正方形 * 可能 * 会更快。我们也可以减少加法的次数。一旦找到匹配项,我们就可以跳出内部循环。
kognpnkq2#
内部循环退出后,其变量不会重新初始化,仍为251。您应在外循环内部初始化变量: