【发布时间】:2010-06-22 00:56:50
【问题描述】:
我正在尝试解决 Project Euler #9,即http://projecteuler.net/index.php?section=problems&id=9。
我查看了这段代码,逻辑似乎是正确的……但我根本没有得到 任何 输出,甚至循环中的 printfs 也没有。我(显然)是 C 新手,正在尝试学习更高级别的语言……你能告诉我出了什么问题吗?
#include <stdio.h>
int main(){
unsigned int a=0, b=0, c=0;
short int pass=0;
while(!pass){
//printf("a = %4d\n", a);
a++;
b=a;
while(!pass){
b++;
c=1000-a-b;
if(b>=c) break;
if(a*a+b*b==c*c) pass = 1;
}
}
printf("a=%d, b=%d, c=%d, a*b*c=%d, a+b+c=%d\n", a, b, c, a*b*c,a+b+c);
return 1;
}
非常感谢。
编辑:好的,如上所示,我已经修复了浮点问题,但现在由于某种原因,a 永远不会超过 2,使其无限循环。
编辑:我修复了一些错误,但它仍然返回a=33, b=483, c=484, a*b*c=7714476, a+b+c=1000,这不太正确。 :(
哇,我太复杂了。现在可以了。谢谢大家。
【问题讨论】:
-
您选择 0.01 作为容差是任意的 - 并且是可疑的。但是,它也与值(a=33,b=483,c=484)没有明确的关系,因为 √(33² + 483²) 约为 484.126。出于速度和准确性的原因,您确实需要消除使用“sqrt()”。
-
你应该打印出 'aa+bb' 和 'c*c'。
-
您的代码第一次达到“if (a + b + c == 1000)”条件时,它会退出两个循环,即使未达到毕达哥拉斯条件也是如此。 REWRITE - 使用 while 循环的方法存在缺陷且不必要地复杂。
标签: c pythagorean