(C++) 生成数组中第一个p*n个完全平方数(p和n从键盘输入)
(C++) Generate first p*n perfect square numbers in an array (p and n inputted from the keyboard)
我从键盘输入 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{ }
语句中,那么算法将永远不会结束,一旦它达到一个非平方数(它将是即时的,除非第一个它checks is a perfect square) 该算法将停止迭代成功,并将被阻止无限次地检查相同的数字。
有什么办法可以解决这个问题吗?
生成它们,而不是搜索它们。
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] << ' ';
}
}
我从键盘输入 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{ }
语句中,那么算法将永远不会结束,一旦它达到一个非平方数(它将是即时的,除非第一个它checks is a perfect square) 该算法将停止迭代成功,并将被阻止无限次地检查相同的数字。
有什么办法可以解决这个问题吗?
生成它们,而不是搜索它们。
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] << ' ';
}
}