解题思路:本题目在思路方面没什么难的,两层循环嵌套而已,外层循环用来遍历1到n,内层循环用来判断是否是完数。问题的关键在于如何像题目要求的那样输出** its factors are ******* ,因为完数的因子个数是不确定的,而printf只能一一对应的占位输出,所以这两个输出无法用一行printf完成,必须分成两截,前一截在判断完是完数之后打印前半段,同时留一个空格并且不能换行,这样能够保证后面打印因子的时候直接跟在are 的后面;而由于因子数目不确定,所以在确定一个数是完数之后,必须立刻继续嵌套一个循环去输出因子,用printf("%d ",x);去打印因子,这里同样要留一个空格并且不能换行,保证后续循环中打印的因子都跟在同一行。而最后在跳出某个完数输出之后再额外打印一个换行符用来换行,然后进入最外层循环重新开始上述过程。整个过程确实挺麻烦的,还有很多细节需要注意
注意事项:不要忘了空格,不要忘了前面不能随手加换行符,到最后额外打印一个换行符用来换行!循环嵌套和判断不要搞混!
参考代码:
#include<stdio.h>
#include<math.h>
#include <string.h>
int main()
{
int i,n,b=0;//i是要求的数字,它会从1到n遍历,n是我们输入的,用来划定范围,b是用来累加因子判断完数的。
scanf("%d",&n);
for(i=1;i<=n;i++){
b=0;//每过一次外层大循环,都要把b初始化为0,用来新的i去累加因子
for(int a=1;a<i;a++){
if(i%a==0){
b=b+a;//因子累加
}
}
if(b==i){ //确定是完数
printf("%d its factors are ",i);//打印前半截
for(int x=1;x<i;x++){
if(i%x==0) printf("%d ",x);//打印后半截的因子
}
printf("\n");//对于一个完数打印完之后再换行
}
}
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复