2013-02-27 1 views
0

Я написал ниже код, но он дает результат повторный. Такие, как 3,4,5 и 4,5,3 и 5,4,3. Он показывает тот же триплет. Как я могу это предотвратить?Как фильтровать повторяющиеся триплеты из этого пифагорейского триплетного кода?

#include <stdio.h> 

int main(void){ 

int side1=1; 
int side2=1; 
int hypotenus=1; 
int till; 
int count=0; 

printf("Till what number do you want to find triplets?"); 
scanf("%d",&till); 

for(side1=1;side1<=till;side1++){ 

    for(side2=1;side2<=till;side2++){ 

     for(hypotenus=1;hypotenus<=till;hypotenus++){ 

      if(hypotenus*hypotenus==side1*side1+side2*side2){ 

       count++; 
       printf("%5d %5d %5d is a triple \n",side1,side2,hypotenus); 
      } 
     } 

    } 

} 
printf("\n"); 
printf("%d triplets found.",count); 
return 0; 

} 
+0

Я был бы удивлен, увидев, что эта программа производит «4,5,3 и 5,4,3 ". Значение 'hypotenus' не может быть меньше, чем' side' или 'side2'. –

+0

Вы правы, я просто привел их в качестве примера. Он дает только 3 4 5 и 4 3 5. Не третий – Lyrk

ответ

5

Просто сделать это:

for(side2=side1;side2<=till;side2++){ 

изменить т.е. начальное значение этого цикла. Таким образом, вы найдете только триплеты, где side2> = side1, и никогда не посчитаете как триплет типа (side1, side2, hyp), так и триплет типа (side2, side1, hyp)

+0

Благодаря умному решению – Lyrk

Смежные вопросы