hdu 2010 水仙花数(c语言)

版权声明:本文为博主原创,未经博主允许不得转载 https://blog.csdn.net/Sherry_Yue/article/details/83216082

hdu 2010 水仙花数

点击做题网站链接

题目描述

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Problem Description
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^ 3 + 5^ 3 + 3^ 3。
现在要求输出所有在m和n范围内的水仙花数。

Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。

Output
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。

Sample Input
100 120
300 380

Sample Output
no
370 371

题目难点

1. 输出格式要求,见下面笔记1
2. 用bool “开关”控制输入输出

问题解答

#include <stdio.h>
int main(void)
{
    int m,n,i,a,b,c;
    while(scanf("%d %d",&m,&n)!=EOF)
    {
        bool t=0;//用 bool定义 t为一个 “开关 ”,t=0表明开关关上了,t=1表示开关打开了
        //注意,这个开关定义在 for循环外面是为了保证每次输入数据的时候,开关都是关着的
        for(i=m;i<=n;i++)//i既控制循环次数,又充当从 m到 n的每个数字变量
        {
            a=i/100;//分解数字的百位
            b=(i-a*100)/10;//分解数字的十位
            c=i%10;//分解数字的个位
            if(i==a*a*a+b*b*b+c*c*c)//如果 i是水仙花数,则可以进行下面花括号中的操作
            {
                if(t==1) printf(" ");//当第一次输出水仙花数的时候,开关是关上的,所以不会输出空格,
                //保证了输出的第一个水仙花前不会出现空格导致Presentation Error
                //也保证了如果之后再输出水仙花数,开关会被打开,而会在第二个、第三个……水仙花数之前输出空格
                //还保证了不会奇怪的在最后一个水仙花数之后输出空格
                printf("%d",i);
                t=1;//只要输出过,“开关 ”就打开
            }
        }
        if(t==0) printf("no");//只有满足开关关上,即从来没有输出过水仙花数的时候才可以输出 “no”字符
        printf("\n");//每输入输出一次都要换行
    }
}

笔记:

  1. 最毒瘤的是题目设置的输出格式,比如样例输出370(空格)371,只有两数之间有空格,370前和371后都要没有空格,关键做题的时候这个样例展示又看不清楚前后有没有空格,真是被Presentation Error坑死了!

猜你喜欢

转载自blog.csdn.net/Sherry_Yue/article/details/83216082