C++ Как изменить вывод на новый массив

Поэтому я написал программу, которая должна выбирать идеальные квадраты из массива и помещать его в другой массив. Пример: (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++... как я

5 ответов

Вам нужно вести отдельный подсчет количества найденных вами идеальных квадратов и использовать его, чтобы поместить ваши ответы в массив идеальных квадратов:

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++" не позволит вам сделать это.

Вы говорите о втором массиве (результат), но ваш код объявляет только один массив! Кроме того, вы ссылаетесь 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];
    }
}

Создайте другой массив, удалите все вхождения 0 из resultArray и добавьте ненулевое значение в newArray.

ИЛИ ЖЕ

int j=0
if(A[i]==p*p) 
  squares[j++]=A[i];
#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;
}

Полный код того о чем вы сказали выше

Если вы не хотите изменять свой код, вы можете написать следующее:

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];
    }
}
Другие вопросы по тегам