1. 程式人生 > >hdu 2010 水仙花數(c語言)

hdu 2010 水仙花數(c語言)

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坑死了!