2012-03-11 3 views
1

을 반복되지만 출력은 권리가 나올 것 같지만 출력은 두 번 반복 될 나오는내 코드 출력 내가 직각 삼각형 에 대한 삼각형 찾는 perameters이 코드를하고 있어요

#include<iostream> 
#include<vector> 
#include<list> 
#include <math.h> 
#include <algorithm> 


using namespace std; 

int main() 
{ 
    int a; 
    float c; 
    vector<double> retval; 
    double intiger; 
    double p; 
    double l = 25; 
    float array[3]; 

    for (int b=1; b < l; b++) { 
     for (int a=1; a < l; a++) { 
      intiger = sqrt((b*b)+(a*a)); 
      c = sqrt((b*b)+(a*a)); 
      if (c == intiger) { 
       array[0]=a; 
       array[1]=b; 
       array[2]=c; 
       //int elements = sizeof(array); 
       //cout << elements << endl; 
       sort(array, array +3); 
       //retval.push_back(a); 
       //retval.push_back(b); 
       //retval.push_back(c); 
       if (c == a) { 
        continue; 
       } 
       p = a + b + c; 
       if (p > l) { 
        break; 
       } 
       //cout << "p == " << p << endl; 
      } else { 
       continue; 
      } 

      //if (retval.size()== 62) 
      //cout << c <<endl; 
      //cout << " a = " << a << " b = " << b << " c = " << c << " " 
      cout << array[0] << " " << array[1] << " " << array[2] << endl; 
     } 
    } 

    return 0; 
} 

을 반복했다.

3 4 5 

3 4 5 

6 8 10 

6 8 10 

한 번만 반복하고 싶습니다.

+3

들여주십시오 수정할 수 있습니다 암호. –

+0

} 뒤에 "한 줄"을 내립니다. – TreyA

+0

나는 cout을 움직 였지만 코드는 바르게 나왔지만 여전히 반복적으로 – user1261771

답변

3

이 반복이 필요한 이유는 알고리즘 내에서의 정렬과 관련이 있습니다. 중첩 루프는 두 주.에서 모든 숫자 쌍을 확보합니다. 내부 루프에 a == 3b == 4이있는 경우에는 내부 루프에 a == 4b == 3도 포함됩니다. 이 테스트 ab 작동하면

출력 주요 테스트는 그 숫자 쌍은 3 일 경우, (4) 다음을 위해 작동 (반전 될 때 작동 다음

intiger = sqrt((b*b)+(a*a)); 
c = sqrt((b*b)+(a*a)); 
if(c == intiger) 
{ 

인 4, 3

나중에에이 다른이 동일한을 가지고 쌍을 주문하거나 원인이되는 결과 출력

sort(array, array +3); 

를 정렬 배열에서 der. 이 최종 값이 출력되고 동일한 값이 두 번 표시되는 것처럼 보입니다. 당신이 두 값 쌍을하지 않도록

이 배열을
  • 변경 루프를 정렬하지 마십시오 다음

    1. 중 하나를 해결하려면.
  • 0

    마찬가지로 JaredPar는 a, b에 동일한 값 쌍을 부여하지 않습니다. (3,4) (4,3)과 같습니다. 그런 다음 정렬 된 순서로 둘 다 (3,4,5)와 동일한 결과를 제공합니다.

    그와 같은 루프에 대한 변경 내용은

    ....

    for (int b=1; b < l; b++) 
         for (int a=1; a < b; a++) 
    

    그리고 당신은 코드의 계속 다음과 같은 reability을 개선하기 위해 문을 휴식을 ....

    #include<iostream> 
    #include<vector> 
    #include<list> 
    #include <math.h> 
    #include <algorithm> 
    
    
    using namespace std; 
    
    int main() 
    { 
        int a; 
        float c; 
        vector<double> retval; 
        double integer; 
    
        double l = 25; 
        float array[3]; 
    
         for (int b=1; b < l; b++) 
          for (int a=1; a < b; a++) { 
    
          integer = sqrt((b*b)+(a*a)); 
          c = sqrt((b*b)+(a*a)); 
    
          if (c != integer) 
          continue; 
    
    
          array[0]=a; 
          array[1]=b; 
          array[2]=c; 
          sort(array, array +3); 
    
          if(c != a && a+b+c > l) 
          break; 
    
          cout << array[0] << " " << array[1] << " " << array[2] << endl; 
    
          } 
    
    
         return 0; 
        }