(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{ }
语句中,那么算法将永远不会结束,一旦它达到一个非平方数(除非它检查的第一个是完美平方,否则这将是即时的),算法将停止迭代成功,并将被阻止无限次检查同一个数。
有办法解决这个问题吗?
与其搜索它们,不如生成它们。
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] << ' ';
}
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 通过键盘输入字符串数组和 int 数组的数组大小
- 为什么当数组作为调用方函数中的参数传递时,不能在被调用函数中使用 foreach 循环打印数组的值
- 在MSVC上的数组初始化期间,destructor在不复制或移动构造方的情况下调用
- (C++)生成数组中的第一个p*n完美平方数(从键盘输入p和n)
- 使用键盘功能修改C GLUT中的2D数组指针
- 练习:使用数组计算方差
- 斐波那契数的方差
- 是否可以允许用户用键盘输入数组大小?
- 用键盘输入数字到数组中,但只有一行
- 以 XLL 为单位获取调用方定义的输出数组尺寸