1

信息:a为直角三角形最短边b的长度和另一边的长度,两者之间的差异越大ab角度越小。那是:

  • 三元组 (3, 4, 5) 的差异为 4-3=1
  • 三元组 (5, 12, 13) 相差 12-5=7

因此最小的角度将在三元组 (5, 12, 13)

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

#include <stdio.h>

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


int main() {

 int a = 0, b = 0, c = 0, n, counter = 1, i = 0;

 printf("Please Enter a Positive Integer: \n");
 scanf("%d", &n);

 for (c = 0; c < n; c++) {
   for (b = 0; b < c; b++) {
     for (a = 0; a < b; a++) {
       if (a * a + b * b == c * c ) {
         printf("%d:\t%d %d %d\n", counter++, a, b, c);
       }
     }
   }
   i = counter - 1;
 }
 printf ("The difference is %d\n", smallest(a, b));
 printf ("There are %d Pythagorean Triples in this range.\n", i);
 return 0;
}

该程序只是打印差异为0

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

我知道我必须对差异进行分类并进行比较,但这就是我目前所拥有的,有什么建议吗?

4

2 回答 2

0

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

int smallest(int a, int b) {
  return b-a;
}
于 2013-10-23T07:45:18.327 回答
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);
    
于 2013-10-23T07:38:40.153 回答