蓝桥杯中的完美数问题

总结:这个题目很简单,之所以发出来的目的是为了说明一个问题,就是有时候在代码逻辑没有问题的情况下在考试系统上面交不上去代码,那么问题有可能就是宏定义变量的范围问题了

题目内容:


如果有一正整数n,其真因数的总和等于n,则称之为完美数。
例如以下几个数都是完美数:
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
求小于n的所有完美数. 
 输入描述

输入一个正整数n
 输出描述
输出小于n的完美数,按升序输出,每个数据占一行
 输入样例
10

输出样例
6

分析:这个题目就是要先将输入的数字的所有约数求出来,然后放入一个数组,如果这些约数的和正好
等于这个数本身,那么这个数就满足条件,计数的变量自加1

先看看我在vc上面编译通过的代码:

#include<stdio.h>
#define M 1000
int main()
{
	int n;
	int i,j,k = 0,l;
	int a[M],b[M] = {0};
	int sum = 0;
	scanf("%d",&n);
	for(i = 2;i < n; i++)
	{
		k = 0;
		a[i] = i;
		for(j = 1;j < a[i]; j++)
			if(a[i]%j == 0)
			{
				b[k] = j;
				k++;
			}
		for(l = 0;l < k; l++)
		{
			//printf("%d ",b[l]);
			sum = sum + b[l];
		}
		//printf("\nsum = %d\n",sum);
		//printf("\n");
		if(sum == i)
			printf("%d\n",i);
		sum = 0;
	}
	return 0;
}

这个代码开起来没有问题,因为题目中的三个数字都可以显示出来,但是交到系统里面就不对了,为此我有仔细检查了问题~之后我只做了一个很小的改动,然后就ok了~~~

其实就是把#define M 1000改成了#define M 10000

哈哈哈~~~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值