打印最高毕达哥拉斯三重奏 - C.

时间:2015-10-19 00:22:10

标签: c pythagorean

到目前为止,该程序打印所有三元组并告诉您输入的数字是否没有三元组。我需要它在列出所有三元组之后再次打印具有最高值C的三元组。 Example I/O for this project

#include <stdio.h>

void main()
{

    int a = 0, b = 0, c = 0, n;
    int counter = 0;    // counter for # of triples

    printf("Please Enter a Positive Integer: \n"); //asks for number
    scanf_s("%d", &n); //gets number

    for (c = 0; c < n; c++)  //for loops counting up to the number
    {
        for (b = 0; b < c; b++)
        {
            for (a = 0; a < b; a++)
            {
                if (a * a + b * b == c * c) //pythag to check if correct
                {
                    printf("%d: \t%d %d %d\n", ++counter, a, b, c); //prints triples in an orderd list

                }
                else if (n < 6) // if less than 6 - no triples
                {
                    printf("There is no pythagorean triple in this range");
                }
            }
        }
    }
    getch(); //stops program from closing until you press a keys
}

如果我在15中输入15,它将打印:

3 4 5
6 8 10
5 12 13

所以它打印的最后一个三元组总是具有最高的C值(5 12 13)但是我需要打印一个声明,说特定的三元组具有最高值。

1 个答案:

答案 0 :(得分:0)

请尝试这个,我相信你可以改进,它可以工作,但我没时间清理它,所以玩得开心!

#include <stdio.h>

void main(  )
{

  int a = 0, b = 0, c = 0, n;
  int counter = 0;      // counter for # of triples
  int triple_sum[6];
  int sums = 0;
  int triple_high_sum = 0;
  int triple_high_index = 0;

  printf( "Please Enter a Positive Integer: \n" );  //asks for number
  scanf( "%d", &n );        //gets number

  for ( c = 0; c < n; c++ ) //for loops counting up to the number
  {
    for ( b = 0; b < c; b++ )
    {
      for ( a = 0; a < b; a++ )
      {
    if ( a * a + b * b == c * c )   //pythag to check if correct
    {
      printf( "%d: \t%d %d %d\n", counter, a, b, c );   
     //prints triples in an orderd list
      triple_sum[counter++] = a + b + c;

    }
    else if ( n < 6 )   // if less than 6 - no triples
    {
      printf( "There is no pythagorean triple in this range" );
      break;
    }
      }             // endfor

    }               // endfor
  }

  sums = --counter;
  triple_high_sum = -1;
  if ( sums )
    while ( sums > -1 )
    {
      printf( "\ntriple_sum %d == %d", sums, triple_sum[sums] );
      if ( triple_sum[sums] > triple_high_sum )
      {
    triple_high_sum = triple_sum[sums];
    triple_high_index = sums;
      }
      sums--;
    }               // endwhile

  if ( triple_high_sum > -1 )
    printf( "\nThe triple index with the largest value is %d",
        triple_high_index );

  getchar(  );          //stops program from closing until you press a keys
}
        //stop