解题思路:本题目在思路方面没什么难的,两层循环嵌套而已,外层循环用来遍历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;

}


点赞(1)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论