[自用]xdoj期末备考注意事项(流程控制)

其实也没什么要注意的,这里以水仙花数题目为例:

题目:   
水仙花数

类别
流程控制

时间限制    
2S

内存限制    
10000Kb

问题描述    
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。

输入说明    
输入由两个整数a和b构成,a和b之间用空格分隔。0<a,b<10000

输出说明    
输出区间[a,b]或区间[b,a]上水仙花数的个数。

输入样例    
3  1000  

输出样例    
4

提示    
a,b的位数n可能小于3

第一,不注意a,b取值范围,将会为您带来更长的代码量

本来不是三位就是四位,方便得很

第二,输入的数字只用到了一遍,直接交换出a小b大就完事了

这是审题上的

绿色的都会,就不提了

取值范围!!!!!!!!

其次是一大堆数字字母定义来定义去的时候.....

1.小心整形和浮点型

除法除非是取整,否则一律无脑加点

2.注意一些循环内的计数变量,第一点计数变量一定要初始化为0;

第二点,在嵌套循环里的计数变量大概率是要反复计数的,所以要在里面初始化为0!!

3.代码如果通过但是运行不出——

        1.直接崩溃,可能涉及地址和循环数字过大

        2.一直运算,可能循环条件出问题了,或者循环变量在代码里面 二次赋值

代码没有把红色对应的问题订正

#include <stdio.h>
#include <math.h> 

int function(int a, int b)
{
	int i, k, m, n, t;
	int sum;
	int count = 0;
	int temp;
	
	if (a >= b)
	{
		t = a;
		a = b;
		b = t;
	}
	
	 	
	for (i= a; i<= b; i++)
	{
		sum = 0;
		temp = i;
		n = 0;
		if (i< 100)
			continue;
		while (temp)
		{
			temp = temp/10;
			n++;
		}


		for (k=0; k<=10; k++)
		{
			m = int(i / pow(10,k)) % 10;
			sum += pow(m,n);
		}	
		if (i == sum)
			count++;
	}	
	return count;
}

int main(void)
{
	int a1, a2;
	scanf("%d %d", &a1, &a2);
	
	printf("%d", function(a1, a2));
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值