2012-12-08 38 views
1

我必須查看矢量中的哪一個是平方數然後用另一個矢量用平方數 例如:(4,15,6,25,7 ,81),第二將(4,25,81)C++數組選擇平方數並製作新的矢量

4,25,81因爲2×2 = 4的5×5 = 25和9x9的= 81

我開始這樣的:

{ 

    int A[100],n,r,i; 
    cout<<"Number of elements="; 
    cin>>n; 
    for(i=1;i<=n;i++) 
    { 
     cout<<"A["<<i<<"]="; 
     cin>>A[i]; 
    } 
    for(i=1;i<=n;i++) 
     { 
      r=sqrt(A[i]); 
      if(r*r==A[i]) 


    } 

return 0; 

} 

但我不確定如何繼續

+0

你是指完美*正方形*? – juanchopanza

+0

是的,我做了,對不起,我的錯誤 – cUser26

+1

['std :: vector squares;'](http://en.cppreference.com/w/cpp/container/vector)然後'squares.push_back(A [i] );'。 – BoBTFish

回答

0

由於您事先不知道用戶將輸入多少個整數或者其中有多少個實際上是正方形,因此您應該使用動態數組分配(或者更好,使用像std :: vector之類的容器)。

int A[],n,r,i, numSquares = 0; 
cout<<"Number of elements="; 
cin>>n; 

if(n>MAX_NUMBERS) { 
    // error: user wants to enter too many integers 
} 

A = new[n]; // dynamically allocate array 

for(i=0;i<n;i++) // array indexing ranges from 0 to n-1 
{ 
    cout<<"A["<<i<<"]="; 
    cin>>A[i]; 
} 
for(i=0;i<n;i++) 
{ 
    r=sqrt(A[i]); 
    if(r*r!=A[i]) { // A[i] is not a square, "erase" it 
     A[i] = INT_MAX; 
    } else { 
     ++numSquares; // A[i] is a square, leave it alone 
    } 
} 

// collect all squares not "erased" in a new array 
int squares[] = new int[numSquares], j=0; 
for(int i=0; i<n; i++) 
    if(A[i]!=INT_MAX) 
    squares[j++] = A[i]; 

delete [] A; 
delete [] squares; 
4

有針對的算法:

std::copy_if(inputs.begin(), inputs.end(), std::back_inserter(squares), 
    [](int N) {int s=(int)sqrt(N); return s*s==N; }); 

你可能想闡述的是一點點,比如無論是從intunsigned改變,或立即返回false爲負數(除非你想涉及複雜的數字,而不僅僅是整數)。