所以学校已经开始,我的编码有点生疏,我去了我的教授,据他说我很亲近,我相信我更接近,但我被卡住了。
该作业主要是为了让我们了解如何在linux中使用“Vi”,并附带一个小编码,因此我们可以在Vi中编码。
这是我们需要做的,向用户询问正数,一旦给出正数,我们需要确定所有可能达到给定数字的数字的毕达哥拉斯三元组。
到目前为止,这就是我所拥有的......
#include <stdio.h>
int main(void)
{
int x = 0, y = 0, z = 0, n;
int count = 0;
printf("Please Enter A Positive Integer: \n");
scanf("%d", &n);
while (z <= n)
{
while (y < z)
{
while (x < y)
{
if (x * x + y * y == z * z)
{
printf("%d: \t%d %d %d\n", ++count, x, y, z);
}
x += 1;
}
y += 1;
}
z += 1;
}
现在,如果我输入任何5或更高的数字,我会得到一个正确的三联“3 4 5”
Please Enter A Positive Integer: 25
1: 3 4 5
但无论我走得多高,这都是我得到的任何提示?
答案 0 :(得分:1)
您需要在每个循环期间重置x和y的值:)。你拥有的大致是这样的:
for(z = 0; z <=n; z++)
for(; y < z; y++)
for(; x < y; x++)
相反,您需要在每次到达循环时重置x和y,所以:
while(z <= n) {
y = 0;
while(y < z) {
x = 0;
//...
答案 1 :(得分:1)
在外部循环的后续迭代中,您没有将x
和y
重置为0
。您可能需要考虑for
循环而不是while
循环。
for (z = 0; z <= n; z++)
{
for (y = 0; y < z; y++)
{
for (x = 0; x < y; x++)
{
if (x * x + y * y == z * z)
{
printf("%d: \t%d %d %d\n", ++count, x, y, z);
}
}
}
}
答案 2 :(得分:1)
做一点调试。在你的毕达哥拉斯测试中添加一个else子句,看看你实际测试的是什么值;
if (x * x + y * y == z * {
printf("%d: \t%d %d %d\n", ++count, x, y, z);
} else {
printf("NOT PYTH: %d: \t%d %d %d\n", ++count, x, y, z);
}
这会引导您解决问题。