2012-12-08 1 views
1

벡터에서 다음 중 어느 것이 사각형 번호인지 확인한 다음 사각형 번호가 다른 다른 벡터를 만듭니다 예 : (4,15,6,25,7 81) 두 번째 것 (4,25,81)C++ 배열에서 사각형 번호를 선택하고 새 벡터를 만듭니다

4,25,81은 2 × 2 = 4 × 5 = 25, 81 = 9 × 9

는 I는 다음과 같이 시작 이유는

{ 

    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 사각형;] (http://en.cppreference.com/w/cpp/container/vector)'squares.push_back (A [i]);'. – BoBTFish

답변

0

사용자가 얼마나 많은 정수를 입력할지 또는 얼마나 많은 정수를 실제로 제곱할지 알지 못하기 때문에 동적 배열 할당을 사용하거나 std :: vector와 같은 컨테이너를 사용하는 것이 좋습니다.

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

당신은 당신이 원하는 않는 한, 거의 같은 중 하나를 변경 int에서 unsigned에, 즉시이 (음수 false을 반환하는 것을에 자세히 설명 할 수 있습니다 : 해당하는 알고리즘이있다

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

정수가 아닌 복소수 포함).

관련 문제