C++程序中,如何运用数组知识求1000以内的完全数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++程序中,如何运用数组知识求1000以内的完全数相关的知识,希望对你有一定的参考价值。
一个整数的因子是能够整除它的整数。包括1但是不包括它本身.
不过我们一般考虑的是正整数,比如8的因子有1,2,4和8。如果除去这个整数本身就是真因子了。
6是一个非常"完善"的数,与它的因数之间有一种奇妙的联系。6的因数共有4个:l、2、3、6,除了6自身这个因数以外,其他的3个都是它的真因数,数学家们发现:把6的所有美因数都加起来,正好等于6这个自然数本身!
数学上,具有这种性质的自然数叫做完全数。例如,28也是一个完全数,它的真因数有 1、2、4、7、14,而 1+2+4+7+14正好等于28。
一般的大家都认为,1不是完全数.
/* 完全数 */
#include "stdio.h"
#include "conio.h"
main()
int i,j,n,w,flag=0,a[50],sum;
/*以是输入一个数的*/
printf("请输入一个正整数:\n");
scanf("%d",&n);
/*以下是求不大于该数的完全数的*/
printf("不大于%d的数中,",n);
for(w=1;w<=n;w++)
j=1;
sum=0;
for(i=1;i<w;i++)
if(w%i==0)
a[j]=i;
j++;
for(i=1;i<j;i++)
sum=sum+a[i];
if(sum==w)
printf("\n%d是完全数.它的因子为:",w);
for(i=1;i<j;i++)
printf("%8d",a[i]);
flag=1;
if(flag==0)
printf("没有完全数.");
return 0;
getch();
参考技术A C++版的!!!
#include "iostream.h"
void main()
int k[40];
int i,j,s,m,n;
cout<<"请输入要寻找完全数的范围"<<endl;
cin>>m;
for(j=2;j<=m;j++)
n=0;
s=j;
for(i=1;i<j;i++)
if((j%i)==0)
n++;
s=s-i;
k[n]=i;
if(s==0)
cout<<j<<"是一个完全数,它的因子是:";
for(i=1;i<=n;i++)
cout<<k[i]<<" ";
cout<<endl;
C++ 数组与字符串⁽²²⁾|多维数组
第二十二章:C++ 多维数组
在此篇教程中,我们将学习 C++ 中另外一个知识点:多维数组。更具体地说:如何在我们的程序中声明、访问、并有效地使用它。
在C++中,我们可以创建一个数组的数组,称为多维数组。例如:
int x[3][4];
这里,x是一个二维数组。它最多可以容纳
我们可以把这个数组想象成一个有 3 行 4 列的表,如下图所示。
三维数组同理,例如:
float x[2][4][3];
这个数组x最多可以容纳
即简单地乘以数组的维度来确定数组中元素的总个数:
2 x 4 x 3 = 24
多维数组初始化
与普通数组一样,我们可以通过多种方式初始化多维数组。
二维数组的初始化
int test[2][3] = {8, 18, 188, 9, 19, 199};
上述方法请不要优选使用。下面给出了使用相同数组元素初始化此数组的更好方法:
int test[2][3] = { {8, 18, 188}, {9, 19, 199}};
这个数组有 2 行 3 列,这就是为什么以上初始化则有 2 个{ },每{ } 3 个元素。
三维数组的初始化
int test[2][3][4] = {3, 4, 2, 3, 0, -3, 9, 11, 23, 12, 23,
2, 13, 4, 56, 3, 5, 9, 3, 5, 5, 1, 4, 9};
以上也不是初始化三维数组的最好方法。初始化此三维数组的更好方法如下:
int test[2][3][4] = {
{ {3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2} },
{ {13, 4, 56, 3}, {5, 9, 3, 5}, {5, 1, 4, 9} }
};
注意这个三维数组的维度。
第一个维度的值为 2
。因此,构成第一个维度的两个元素是:
元素 1 = { {3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2} }
元素 2 = { {13, 4, 56, 3}, {5, 9, 3, 5}, {5, 1, 4, 9} }
第二个维度的值为 3
。请注意,第一个维度的每个元素都有三个元素:
元素1:{3, 4, 2, 3}, {0, -3, 9, 11} 与 {23, 12, 23, 2}
元素2:{13, 4, 56, 3}, {5, 9, 3, 5} 与 {5, 1, 4, 9}
最后,第二维的每个元素内部都有 4 个 int
:
{3, 4, 2, 3}
{0, -3, 9, 11}
... .. ...
... .. ...
示例 1:二维数组
// C++ 程序显示所有元素
// 一个初始化的二维数组
#include <iostream>
using namespace std;
int main() {
int test[3][2] = {{2, -5},
{4, 0},
{9, 1}};
// 嵌套for循环的使用
// 访问数组的行
for (int i = 0; i < 3; ++i) {
// 访问数组的列
for (int j = 0; j < 2; ++j) {
cout << "test[" << i << "][" << j << "] = " << test[i][j] << endl;
}
}
return 0;
}
test[0][0] = 2
test[0][1] = -5
test[1][0] = 4
test[1][1] = 0
test[2][0] = 9
test[2][1] = 1
在上面的例子中,我们初始化了一个名为test的二维int数组,它有 3 个 '行' 和 2 个 '列'。
以上程序中,我们使用了嵌套的 for
循环来显示数组元素。
从
i == 0
到i == 2
的外循环访问数组的行从
j == 0
到j == 1
的内部循环访问数组的列
最后,我们在每次迭代中打印数组的所有元素。
示例 2:获取输入数据并存入二维数组
#include <iostream>
using namespace std;
int main() {
int numbers[2][3];
cout << "请输入6个数字: " << endl;
// 将用户的输入存储在数组中
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cin >> numbers[i][j];
}
}
cout << "你输入的数字是: " << endl;
// 打印数组元素
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cout << "数字[" << i << "][" << j << "]: " << numbers[i][j] << endl;
}
}
return 0;
}
请输入6个数字:
1
2
3
4
5
6
你输入的数字是:
数字[0][0]: 1
数字[0][1]: 2
数字[0][2]: 3
数字[1][0]: 4
数字[1][1]: 5
数字[1][2]: 6
以上程序中,我们使用了一个嵌套的 for
循环来获取二维数组的输入。获取所有输入后,使用另一个嵌套的 for
循环来打印数组成员。
示例 3:三维数组
// C++ 程序将用户输入的值存储在
// 三维数组并显示它.
#include <iostream>
using namespace std;
int main() {
// 此数组最多可存储12个元素 (2x3x2)
int test[2][3][2] = {
{
{1, 2},
{3, 4},
{5, 6}
},
{
{7, 8},
{9, 10},
{11, 12}
}
};
// 显示具有适当索引的值.
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
for (int k = 0; k < 2; ++k) {
cout << "test[" << i << "][" << j << "][" << k << "] = " << test[i][j][k] << endl;
}
}
}
return 0;
}
test[0][0][0] = 1
test[0][0][1] = 2
test[0][1][0] = 3
test[0][1][1] = 4
test[0][2][0] = 5
test[0][2][1] = 6
test[1][0][0] = 7
test[1][0][1] = 8
test[1][1][0] = 9
test[1][1][1] = 10
test[1][2][0] = 11
test[1][2][1] = 12
打印 3d 数组元素的程序类似于 2d 数组的元素的打印方式。
但是,由于我们要操作 3 个维度,因此我们使用嵌套的 for 循环,总共有 3 个循环,而不是只有 2 个:
从
i == 0
到i == 1
的外循环访问数组的第一维从
j == 0
到j == 2
的中间循环访问数组的第二维从
k == 0
到k == 1
的最内层循环访问数组的第三维
综上可得出:数组的复杂度随着维度的增加呈指数式增长。
程序算法实验室 zhangJA-Lab
-----------------------------------------------------------------------------
大家好,这是程序算法实验室订阅号,欢迎各位关注!此处将持续分享关于Linux、DeepLearning、OpenCV、C++、SLAM、Python等技术干货。
以上是关于C++程序中,如何运用数组知识求1000以内的完全数的主要内容,如果未能解决你的问题,请参考以下文章
用c语言求1000以内的素数(素数是只能被1和它本身整除的数)
寻找旋转排序数组中的最小值 II(数组二分查找)打印1000以内的所有素数,并从键盘输入一个正整数,判断是否为素数数组元素统计(算法初阶基础知识)