-2

所以我写了一个程序,它应该从一个数组中选择完美的正方形并将其放入另一个数组中。示例:(2,4,13,5,25,66)和第二个数组(结果)应该是这样的(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并用 s 填充0?还是您希望正方形数组的大小正好合适?

如果您希望它的大小合适,最好使用 a std::vector

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

但我认为你愚蠢的“只有基本的 C++ 命令”限制不允许你这样做。

于 2012-12-09T12:30:28.150 回答
2

您谈论的是第二个数组(结果),但您的代码只声明了一个数组!此外,您引用了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 回答