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 ++ … как я

-2

Решение

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

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

3

Другие решения

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

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

ИЛИ ЖЕ

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

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

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];
}
}
0
По вопросам рекламы [email protected]