教你夺冠


私信TA

用户名:835685327

访问量:157490

签 名:

相互交流 相互学习

等  级
排  名 15
经  验 22633
参赛次数 0
文章发表 84
年  龄 0
在职情况 学生
学  校 辣鸡施工大学
专  业

  自我简介:

努力刷题 熟能生巧!

刚开始我是这样写的:

#include <stdio.h>

int main()
{
    int N;
    scanf("%d", &N);

    int yinzi[N]; //用来存放所查询的数的因子,打印需要
    int sum = 0;  //因子总和
    int n = 0;    //含有因子的个数

    int i, j, k;
    for (i = 2; i < N; i++) //遍历N之内的所有数,从2~N
    {
        for (j = 1; j < i; j++) //用该数除以该数内所有数,若余数为0,则为其因子,不考虑它本身
        {
            if (i % j == 0)
            {
                yinzi[n++] = j;
                sum += j; //对因子求和
            }
        }
        if (sum == i)
        {
            printf("%d its factors are ", i);
            for (k = 0; k < n; k++)
                printf("%d ", yinzi[k]);
            printf("\n");
        }

        sum = 0; //注意清0
        n = 0;
        //memset(yinzi, 0, sizeof(yinzi)); //可以不用这一步,因为n清0了
    }

    return 0;
}


结果超时,可能是循环次数太多了,于是参考其他解决方案,得到下面的代码:

#include <stdio.h>

int main()
{
    int N;
    scanf("%d", &N);

    int yinzi[N]; //用来存放所查询的数的因子,打印需要
    int sum = 0;  //因子总和
    int n = 0;    //含有因子的个数

    int i, j, k;
    for (i = 2; i < N; i++) //遍历N之内的所有数,从2~N
    {
        for (j = 1; j <= i/2; j++) //用该数除以该数内所有数,若余数为0,则为其因子,不考虑它本身
                                         //加快速度1 一个数的因子不可能超过它的1/2
        {
            if (i % j == 0)
            {
                yinzi[n++] = j;
                sum += j; //对因子求和
                if (sum > i)             //加快速度2 当求得sum已经大于该数的时候,提前break
                {
                    sum = 0;
                    n = 0;
                    break;
                }
            }
        }

        if (sum == i)
        {
            printf("%d its factors are ", i);
            for (k = 0; k < n; k++)
                printf("%d ", yinzi[k]);
            printf("\n");
        }

        sum = 0; //注意清0
        n = 0;
    }

    return 0;
}

没想到这样居然通过了,我在codeblocks上面运行的时候有时也会超过1s。。

虽然好像不是什么好办法,但还是继续做题吧~

 

0.0分

10 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

#include<stdio.h>

int main()

{

int a,i=1;       /*先定义两个变量a和i,i的初值为1(因为一个数的因子包括1)*/

scanf("%d",&a);  /*输入想求的数*/
while(i<a)       /*循环条件(当i小于a时(不包括等于a,因为一个数的因子不包括本身))*/

{
if(a%i==0)        /*当i可以被a整除时输出i(这时输出的i即为a的因子)*/

printf("%d its factors are %d\n",a,i);

i++;            /*变量i的值加1*/                

}
return 0;  

}
答案错误????
2020-02-12 15:57:23
#include <stdio.h>
void main()
{
	int a=1,n;
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		if(n%i==0)
			a=a*i;
	}
		if(a==n)
			printf("%d",a);
		else
			printf("不是");
}
这个完数程序那里错了呢
有大佬给我指教一下吗
谢谢了
2019-12-15 17:48:11
int main(void)
{
	int x = 0;
	int y = 0;
	int a;
	for (int i = 0; i <= 2; i++)
	{
		scanf("%d", &a);
		printf("%d its factors are ", a);
		for (int j = 1; j < a; j++)
		{
			if (a%j==0)
			{
				printf("%d\t", j);
			}
		}
	}
	return 0;
}

我的这个很简单,但是发现编译 不通过  为什么啊
2019-10-24 21:19:12
先不说其他的  int yinzi[N];  这个为什么可以通过
2019-08-29 11:49:13
yinzi[n++] = j;
sum += j;          //这里换成了sum+=yinzi[n]之后运行结果就出问题了
请问sum+=yinzi[n]的表达方式有什么问题吗?
2019-07-28 16:21:31
太感谢了!!!
2019-07-28 15:57:33
  • «
  • 1
  • »