0

我从键盘输入pn(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=3and n=3,它将只显示前 3 个平方数而不是 9,其余 6 个为零。现在我知道为什么会发生这种情况,只是不确定如何解决它(它正在检查第一个n * p自然数并查看哪些是正方形,而不是第一个n*p正方形)。

如果我把i--它添加到if{ }语句中,那么算法将永远不会结束,一旦它达到一个非平方数(这将是即时的,除非它检查的第一个是一个完美的平方),算法将停止迭代成功并且将被阻止无限次检查相同的号码。

有任何解决这个问题的方法吗?

4

1 回答 1

0

与其搜索它们,不如生成它们。

int square(int x)
{
    return x * x;
}

int main()
{
    int n = 0;
    int p = 0;
    std::cin >> n >> p;
    int limit = n * p;
    int squares[99] = {};
    for (int i = 0; i < limit; i++)
    {
        squares[i] = square(i+1);
    }
    for (int i = 0; i < limit; i++)
    {
        std::cout << squares[i] << ' ';
    }
}
于 2019-01-29T16:02:35.990 回答