CodeRookie


私信TA

用户名:Shmily124

访问量:120724

签 名:

清风前烹茶对弈,明月下把酒言欢

等  级
排  名 14
经  验 21365
参赛次数 7
文章发表 39
年  龄 0
在职情况 学生
学  校 ZUA
专  业 计科

  自我简介:

悄悄地秃头,然后惊艳所有人?

解题思路:

使用两层循环,外循环寻找完数,内循环寻找因子

细节上为了避免输出因子时仍要循环寻找因子,引入数组来储存因子,并用指针的移动来控制数组的读写

但是非完数也会有储存因子的过程,所以代码写得少了,但运行速度并不算快

主要是不希望做重复的过程和定义太多变量,容易搞乱



参考代码:

#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分

33 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

//一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 
//例如,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;
}
2021-01-27 11:42:46