Я ввожу с клавиатуры p
и n
(тип int) числа, я хочу сгенерировать первые p*n
квадратные числа в массив pp[99]
.Вот мой код:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int i, j, n, p, pp[19];
cout<<"n="; cin>>n;
cout<<"p="; cin>>p;
i=n*p;
j=-1;
while(i!=0)
{
if(sqrt(i)==(float)sqrt(i))
{
j++;
pp[j]=i;
}
i--;
}
for(i=0; i<n*p; i++)
cout<<pp[i]<<" ";
return 0;
}
Но я сталкиваюсь со следующей проблемой: если я, например, введу p=3
и n=3
, он покажет мне только первые 3 квадратных числа вместо 9,остальные 6 нули.Теперь я знаю, почему это происходит, просто не знаю, как это исправить (он проверяет первые n * p
натуральные числа и видит, какие квадраты, а не первые n*p
квадраты).
Если я возьму i--
и добавлю его в оператор if{ }
, то алгоритм никогда не завершится, как только он достигнет не квадратного числа (которое будет мгновенным, если только первое, которое он проверяет, не являетсяидеальный квадрат) алгоритм прекратит успешно выполнять итерации и будет заблокирован, проверяя одно и то же число бесконечное количество раз.
Есть ли способ это исправить?