找出哪个毕达哥拉斯三重奏具有最小角度

时间:2013-10-23 00:49:47

标签: c algorithm

信息:a是直角三角形最短腿的长度,b是另一条腿的长度,a和{{1}之间的差异越大角度越小。那就是:

  • 三重(3,4,5)具有4-3 = 1的差异
  • 三重(5,12,13)具有12-5 = 7的差异

因此,最小角度将是三重(5,12,13)

我正在编写一个程序,比较一个范围内定义的所有毕达哥拉斯三元组,并以最小的角度打印三元组。到目前为止我没有工作,我不知道我可以从哪里去。

b

程序只打印差值为0

我正在寻找要打印的程序,例如上面的例子“角度最小的三角形是(5,12,13)”

我知道我必须对这些差异进行排序并对它们进行比较,但这是我到目前为止所有的提示,还有什么提示?

2 个答案:

答案 0 :(得分:0)

  1. 您确定您的'信息'是对的吗?因为三重(30,40,50)的差异为10,与(3,4,5)的角度相同。
  2. 你不必排序,你必须记住差异/角度/你最小化的东西,正如评论中已经提到的那样。此外,您必须记住'minimal'(a,b,c)的值以便稍后打印。像这样:

    //...
    if (a * a + b * b == c * c ) {
      printf("%d:\t%d %d %d\n", counter++, a, b, c); //if you use ++counter instead, you won't need i ;)
      if(minDifference < b-a){ //Don't be afraid of variables with long names
        minA = a; minB = b; minC = c; minDifference = b-a;
      }
    }
    //...
    printf("The triangle with the smallest difference is (%d, %d, %d)", minA, minB, minC);
    

答案 1 :(得分:0)

您的smallest - 代码在每种情况下都会返回0。您确定不想返回difference(甚至是b-a)吗?

int smallest(int a, int b) {
  return b-a;
}