我试图解决this problem
恰好有一个毕达哥拉斯三重态,其中a+b+c=1000。
我用欧几里得公式:
我的解决方案是:
int a = 0, b = 0, c = 0, m = 0, n = 0;
int abort = 0;
while(abort == 0)
{
m++;
while(abort == 0 && n < 10000)
{
n++;
if(m > n)
{
a = (m*m) - (n*n);
b = 2*m*n;
c = (m*m) + (n*n);
if(a+b+c == 1000 && a > 0 && b > 0 && c > 0 /*&& a < b && b < c*/)
{
exit = 1;
}
}
}
n = 0;
}
如果我运行这个,得到a=375b=200和c=425。这是错误的,因为它应该
a < b < c
但是如果我使用您在我的代码中看到的检查(被注释掉的部分),我的代码将永远运行。那我错在哪里?
最佳答案
a
和b
在公式中完全等价(与a^2 + b^2 = c^2
不同,后者起着明显的作用)。让你的算法保持原样,在你得到结果后,如果它们恰好在“错误”的顺序中,就交换结果中的c
和a
。
从形式上讲,如果任何b
,a
和b
都是毕达哥拉斯的三元组,除非c
不是真的,而a < b
是,那么b < a
,b
和a
是毕达哥拉斯的三元组。
关于c - 毕达哥拉斯三重,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21110044/