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

请您缩进码。 – 2012-03-11 02:48:05

+0

将“cout”向下移动1行,在}之后。 – TreyA 2012-03-11 02:48:16

+0

我移动了cout,但代码出来了,但它仍然重复 – user1261771 2012-03-11 02:54:57

回答

3

这个重复的原因与算法中的排序有关。嵌套循环确保您将在两个订单中获得每个数字对。示例如果您在内部循环中有a == 3b == 4,那么您在内部循环中也将有a == 4b == 3

输出主要测试的是以下

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

如果该测试适用于ab然后它会工作时的数字对被逆转(如果它工作3,4,然后它会为工作4,3

后来你排序结果输出

sort(array, array +3); 

这将导致不同的有序对具有相同或在数组中。输出这个最终值,看起来像相同的值显示两次。

为了解决这个问题做了以下

  1. 一个不排序的数组
  2. 更改循环,使你没有得到这两个值对。
0

由于JaredPar说不要让a,b得到相同的值对。像(3,4)和(4,3)一样。如果按照排序顺序排列,则两者都会给出与(3,4,5)相同的结果。

对于改变for循环....

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

而且,您可以修改代码的continue和break语句来提高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; 
    }