我试图解决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但是如果我使用您在我的代码中看到的检查(被注释掉的部分),我的代码将永远运行。
那我错在哪里?

最佳答案

ab在公式中完全等价(与a^2 + b^2 = c^2不同,后者起着明显的作用)。让你的算法保持原样,在你得到结果后,如果它们恰好在“错误”的顺序中,就交换结果中的ca
从形式上讲,如果任何bab都是毕达哥拉斯的三元组,除非c不是真的,而a < b是,那么b < aba是毕达哥拉斯的三元组。

关于c - 毕达哥拉斯三重,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21110044/

10-11 17:52