-2

そこで、配列から完全な正方形を選択して別の配列に入れるプログラムを作成しました。例: (2,4,13,5,25,66) と 2 番目の配列 (結果) は次のようになります (4,25) 私の結果は次のようになります (0,4,0,0,25,0) ...半分は良い ...4,25 だけを表示するにはどうすればよいですか?

#include<iostream.h>
#include<math.h.>

int main()
{
    int A[100],i,n,p,j;

    cout << "Number of array elements=";
    cin >> n;

    for(i=1;i<=n;i++)
    {
        cout<<"A["<<i<<"]=";
        cin>>A[i];
    }

    for(i=1;i<=n;i++)
    {
        p=sqrt(A[i]) ;   
        if(p*p==A[i])
            A[j]=A[i];
        else
            A[i]=0;

        cout << A[i] << " ";
    }

    return 0;
}

C ++の基本コマンドのみを使用...私がしたように

4

5 に答える 5

3

見つけた完全な正方形の数を個別にカウントし、それを使用して答えを完全な正方形の配列に配置する必要があります。

int squares[???];
// ...
if(p*p==A[i]) {
  squares[squaresFound]=A[i];
  squaresFound++;
}

squaresここでの問題は、配列の長さを決定することです。いくつの正方形が得られるかは前もってわかりません。と同じサイズにしてA、残りを0s で埋めますか? それとも、正方形の配列を正確に正しいサイズにしたいですか?

適切なサイズにしたい場合は、次を使用する方がはるかに優れていますstd::vector

std::vector<int> squares;
// ...
if(p*p==A[i]) {
  squares.push_back(A[i]);
}

しかし、あなたのばかげた「基本的な C++ コマンドのみ」という制限では、これを行うことはできないと思います。

于 2012-12-09T12:30:28.150 に答える
2

あなたは 2 番目の配列 (結果) について話していますが、あなたのコードは 1 つの配列しか宣言していません! さらに、 を参照A[j]していますjが、初期化されていません。

別の配列を宣言し、ゼロB[100]に初期化jしてから、正方形が見つかったら次のコードを使用する必要があります。

int j = 0;
for (int i=0 ; i != n ; i++) {
    int p = sqrt(A[i]);
    if(p*p==A[i]) {
        B[j++] = A[i];
    }
}
于 2012-12-09T12:31:07.567 に答える
0
#include <cmath>
#include <iostream>
using namespace std;


int main()
{
    int A[100];
    int n;

    cout << "Number of array elements = " << endl;
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        cout << "A[" << i << "] = ";
        cin >> A[i];
    }

    int B[100];
    int cnt_sqr = 0;
    for(int i = 0; i < n; i++)
    {
        int p = sqrt(A[i]);
        if (p * p == A[i])
        {
            B[cnt_sqr++] = A[i];
        }
    }

    for (int i = 0; i < cnt_sqr; i++)
    {
        cout << B[i] << ' ';
    }
    return 0;
}

あなたが上で言われたことについての完全なコード

于 2012-12-09T12:39:00.713 に答える
0

コードを変更したくない場合は、次のように記述できます。

for(i=1;i<=n;i++)
{
    p=sqrt(A[i]) ;   
    if(p*p==A[i])
    {
        cout << A[i] << " ";
    }
}

完全な正方形のみを印刷します。

要素を別の配列にコピーする場合:

int squares[100] = {0}; // Assuming that all values can be perfect squares
int square_count = 0;

for(i=1;i<=n;i++)
{
    p=sqrt(A[i]) ;   
    if(p*p==A[i])
    {
        squares[square_count++] = A[i];
    }
}
于 2012-12-09T13:18:55.943 に答える
0

別の配列を作成し、resultArray からすべての 0 を削除し、0 以外を newArray に追加します。

また

int j=0
if(A[i]==p*p) 
  squares[j++]=A[i];
于 2012-12-09T12:30:17.663 に答える