原题链接:[编程入门]完数的判断
解题思路:
使用两层循环,外循环寻找完数,内循环寻找因子
细节上为了避免输出因子时仍要循环寻找因子,引入数组来储存因子,并用指针的移动来控制数组的读写
但是非完数也会有储存因子的过程,所以代码写得少了,但运行速度并不算快
主要是不希望做重复的过程和定义太多变量,容易搞乱
参考代码:
#include <stdio.h>
int main()
{
    int n;
    scanf("%d", &n);                    //输入n
    for (int i = 6; i <= n; i++)        //for循环从第一个完数6开始
    {
        // if (i % 10 != 6 && i % 10 != 8)      continue;   //减少运行时间可加入此行,跳过个位非6与8的数
        int s[100] = {0};               //初始化数组s全为0,循环内的临时数组每次循环都会初始化
        int *p = s;                     //通过指针p的移动来控制数组的读写
        for (int j = 1; j <= i / 2; j++)
        {
            if (i % j == 0)
            {
                *++p = j;               //此处p先后移,再赋值储存因子j
                s[0] += j;              //s[0]储存因子的和
            }
        }
        if (s[0] == i)                  //s[0]==i 则 i 为完数
        {
            printf("%d its factors are", i);
            for (p = &s[1]; *p != 0; p++)   //for循环p指向s[1],值为0时停止,每次循环后移一次
            {
                printf(" %d", *p);
            }
            putchar('\n');
        }
    }
    return 0;
}0.0分
28 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
 
@bobo #include<stdio.h> int main() { int a, b, d, c, e; int cnt = 0; scanf("%d", &e); for (a = 6; a <= e; a++) { int number[100] = {0}; cnt = 0; for (b = 1; b < a; b++) { c = a % b; while (c == 0) { number[cnt] = b; c++; cnt++; } } d = 0; for (int i = 0; i < cnt; i++) { d += number[i]; } if (a == d) { printf("%d its factors are ", a); for (int i = 0; i < cnt; i++) { printf("%d ", number[i]); a++; } printf(" "); } } return 0; }#include<stdio.h> int main() { int a,b,d,c,e; int number[50]; int cnt=0; scanf("%d",&a); for(b=1;b<a;b++){ c=a%b; while(c==0){ number[cnt]=b; c++; } cnt++; } e=cnt; for(cnt;cnt>=0;cnt--){ d+=number[cnt]; } while(a==d){ printf("%d its factors are ",a); for(cnt;cnt<=e;cnt++){ printf(" %d",number[cnt]); a++; } return 0; } }//一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 //例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 //编程序找出N之内的所有完数,并按下面格式输出其因子 //6 its factors are 1 2 3 //28 its factors are 1 2 4 7 14 //496 its factors are 1 2 4 8 16 31 62 124 248 #include<stdio.h> int main() { int a,b[100],n,i,j,k,sum=0,count=0; scanf("%d",&n); for(a=1;a<n;a++) { for(i=1;i<a;i++) { if(a%i==0) { b[count]=i; count++; sum=sum+i; } if(sum==a) { printf("%d its factors are ",a); for(j=0;j<count;j++) printf("%d ",b[j]); printf("\n"); } } } return 0; }