在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
题目内容:自然数中,完数寥若晨星,请在从1到某个整数范围中打印出所有的完数来。所谓“完数”是指一个数恰好等于它的所有不同因子之和。例如,6是完数,因为6=1+2+3。而24不是完数,因为24≠1+2+3+4+6+8+12(=36)。 输入描述:输入数据中含有一些整数n(1<n<10000)。 输出描述:对于每个整数n,输出所有不大于n的完数。每个整数的输出由n引导,跟上冒号,然后是由空格开道的一个个完数,每个n的完数列表应占独立的一行。 题目分析:本题限时一秒。先把小于10000的完数计算出来,放在向量中,然后对于每个n,只需在常量中打印每个完数,直到n之内的完数的界即可。这种算法不会超时。 参考代码: #include <fstream> #include <iostream> #include <vector> using namespace std; int main(int argc,char * argv[]) { vector<int> a; for(int i=2;i<10000;i=i+2) { int sum=1; for(int j=2;j<=i/2;j++) { if(i%j==0) sum=sum+j; } if(sum==i) a.push_back(i); } int n; while(cin>>n) { cout<<n<<":"; for(int i=0;i<a.size();i++) { if(a[i]<=n) cout<<" "<<a[i]; } cout<<endl; } system("pause"); return 0; } 运行结果: |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论