2012-03-11 20 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 

私はそれを1回だけ繰り返す必要があります。

+3

あなたをインデントしてくださいコード。 –

+0

}の後ろに "cout"を1行下に移動します。 – TreyA

+0

私はcoutを動かしましたが、コードは正しく出てきましたが、それでもまだ – user1261771

答えて

3

これが繰り返される理由は、アルゴリズム内でのソートに関係します。ネストされたループにより、両方のオーダーですべての数値のペアが取得されます。例a == 3b == 4が内側のループにある場合、内部ループにはa == 4b == 3もあります。

出力のための主要なテストは、このテストはabために働く場合、数値対が逆転している場合、それが動作する以下

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

である(それは3,4のために働く場合、それはのために動作します4、3

後で上のこれは、異なる順序対が同じを持つようになり、結果の出力

sort(array, array +3); 

を並べ替えますか、配列内のder。この最終値が出力され、同じ値が2回表示されるように見えます。あなたは両方の値のペアを得ることはありませんので、配列

  • 変更にループをソートしない以下の

    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; 
        } 
    
    関連する問題