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
и заполните остальное 0
s? Или вы хотите, чтобы массив квадратов был точно подходящего размера?
Если вы хотите, чтобы он был нужного размера, вам лучше использовать 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];
}
}