天天看點

水仙花數水仙花數題目總結

水仙花數

雖然做過水仙花但做hdu裡的時還是送出了好幾次,确實有一些細節性的地方容易出錯,記錄一下。希望大家可以互相交流。

題目

Problem Description

春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的:

“水仙花數”是指一個三位數,它的各位數字的立方和等于其本身,比如:153=13+53+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

代碼如下():

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

int main()
{
    int n,m,flag;
    while(~scanf("%d%d",&m,&n))
    {
        flag=0;//flag用于判斷範圍内有無水仙花的
        		//每一次flag都要重新指派
        while(m<=n)
        {
        int hun=m/100;
        int ten=m/10%10;
        int one=m%10;
            if(m==pow(hun,3)+pow(ten,3)+pow(one,3))
            {    
            //這裡注意最後一個資料後是沒有空格的
                if(flag==0)
                {printf("%d",m);flag=1;}
                else
                    printf(" %d",m);
            }
        m++;
        }
        if(!flag)
            printf("no\n");
        else
            printf("\n");//有水仙花數最後追加一個回車
    }
    return 0;
}
           

總結

易錯點:

1.

int flag=0;

這裡給flag初始化之後(也可以先不初始化),在循環内必須給flag重新指派

flag=0

。否則這次flag的值會帶入下一次樣例導緻出錯。

2.找到水仙花的最後一項後面是沒有空格的。

解決空格方法:

A.

printf("%d ");空格後置

将得到的水仙花放入一個數組中,對數組進行在最後一項輸出中不要加回車。

弊端:另外開辟數組空間,且大小未知。

B

采用printf(" %d");空格前置

這樣隻需要在第一次時進行判斷,即flag=0時,比較适合。

有幫助的話記得給個👍
           

繼續閱讀