A3: pythagorean
4. find out pythagorean triplets in an integer array.
#include <iostream> #include <vector> #include <set> #include <cmath> using namespace std; vector<vector<int> > findP( vector<int> & x ) { set<int> pool; vector<vector<int> > rel; if(x.size() < 3) return rel; for( int i=0; i<x.size(); i++) { pool.insert( x[i] * x[i]); } set<int>::const_iterator it1 = pool.begin(); set<int>::const_iterator it2;// = pool.begin(); set<int>::const_iterator it3; cout<<"pool size: "<<pool.size()<<endl; for( ; it1!=pool.end(); it1++) { for(it2=++it1; it2!=pool.end();it2++) { int temp = *it1 + *it2; if( (it3=pool.find(temp)) != pool.end()) { vector<int> t; t.push_back( (int)(sqrt((double)*it1))); t.push_back( (int)(sqrt((double)*it2))); t.push_back( (int)(sqrt((double)*it3))); rel.push_back( t ); } } } return rel; } int main(int argc, char** argv) { int x[] = {1,3,3,4,7,5,12,13}; vector<int> input(x,x + sizeof(x)/sizeof(int) ); vector<vector<int> > rel = findP(input); vector<vector<int> >::iterator it; for( it=rel.begin(); it!=rel.end(); it++) { for( int i=0; i<(*it).size(); i++) { cout<<(*it)[i]<<", "; } cout<<endl; } }