1. 程式人生 > >Problem 01. 水仙花數

Problem 01. 水仙花數

Problem 01. 水仙花數

題目簡述:

“水仙花數”是值一個三位數,它各位數字的立方和等於其本身,從小到大輸出所有在[m,n]內的水仙花數並用空格隔開,若不存在則輸出no(100<=m<=n<=999)。

解題思路:

看到這個題目,我會先想到利用除法和取餘將這個三位數各位上的數字取出,再求立方和與其自身相比較。

細節處理:

本題個人認為需要注意的一點就是如何處理輸出格式。本題要求輸出的數用空格隔開,也就是說輸出的最後一個數不存在空格。

錯誤示範:for (int i=0;i<=d;i++) cout<<x[i]<<" ";

原始碼:

#include<iostream>
using namespace std;
int main()
{
    int x[1010];
    long long int m,n;
    int a=0,b=0,c=0,d=0;
    while(cin>>m>>n)
    {
        d=0;
        for(int i=m;i<=n;i++)
        {
            a=i%10;
            b=(i/10)%10;
            c=i/100;//a,b,c即各位上的數字
            if(i==a*a*a+b*b*b+c*c*c)
            {
                x[d++]=i;
            }
        }
        if(d==0) cout<<"no"<<endl;
        else {
            for (int i=0;i<d;i++){
                if (i!=d-1)cout<<x[i]<<" ";
                else cout<<x[i]<<endl;//處理最後一個數據後不加空格
            }
        }
    }
    return 0;
}

相似題目:發工資

已知n個老師的工資,有100、50、10、5、2、1六種紙幣,求最少準備的紙幣數目。

原始碼:

#include<iostream>
using namespace std;
int a[105];
int main()
{
    int n,t;
    while(cin>>n)
    {
        if(n==0) break;
        else
        {
        for(int i=0;i<n;i++)
        cin>>a[i];
        t=0;
        for(int i=0;i<n;i++)
        {
            t+=a[i]/100;//巧妙利用整除和取餘處理紙幣的張數
            a[i]=a[i]%100;
            t+=a[i]/50;
            a[i]=a[i]%50;
            t+=a[i]/10;
            a[i]=a[i]%10;
            t+=a[i]/5;
            a[i]=a[i]%5;
            t+=a[i]/2;
            a[i]=a[i]%2;
            t+=a[i]/1;
            a[i]=a[i]%1;
        }
        cout<<t<<endl;
        }
    }
    return 0;
}