Я пытаюсь решить Project Euler # 9, который является http://projecteuler.net/index.php?section=problems&id=9.вычисление пифагорейских триплетов с помощью c
Я просмотрел этот код, и логика кажется правильной ... но я не получаю любой вывод, даже не 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;
}
Большое спасибо.
EDIT: Хорошо, я исправил проблему с плавающей точкой, как показано выше, но теперь по какой-то причине она никогда не выходит выше двух, делая ее бесконечно замкнутой.
EDIT: Я исправил некоторые ошибки, но все же он возвращает 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()», как по соображениям скорости, так и по точности. –
Вы должны, вероятно, распечатать 'a * a + b * b' и 'c * c'. –
В первый раз, когда ваш код попадает в состояние «if (a + b + c == 1000)», он выходит из обоих циклов, хотя состояние Пифагора не попадает. ** REWRITE ** - Подход с петлями while является ошибочным и излишне сложным. –