發表於 C++CPE考古題UVA

【CPE】UVA 1583 Digit Generator 2019/03/26 考古題 by C++

1583 Digit Generator

簡易翻譯和條件:

題目就是要你找到一個數字a,可以讓某個小於數字a的一個數字i的每一位數與i本身相加之後相等就可以了!

a = i + i的個位數 + i 的十位數 + …..

這題不難但是要注意觀察變化
主要就是不要讓測資超過時間就OK了!

我會利用 inline 是因為這樣速度會比較快。
因為我寫 code 的習慣會把雜亂的部分放到外面當作 function 所以我會使用 inline function
通常這題大家都會直接從 1 到 a 每個數字都算一次,但是這樣的話會超時
其實注意一下就會發現 digit generator 出現的位置並不會離 數字a 本身太遠,所以我就看有幾位數就從 a – digit*10 的地方開始找

(因為有三位數到時候再算總和時就會有 3 個變數會影響到總和阿~

如果有任何問題或是你有更好的寫法歡迎再下面留言討論喔!
我們下一題見啦!

程式碼:

#include iostream
using namespace std;
inline int digits(int t){
    int times = 0;
    while(t!=0){
        t/=10;
        times++;
    }
    return times;
}


inline int k(int a)
{
    int digit = digits(a);
    for(int i=(a-digit*10); i<=a; i++)
    {
        int sum = i;
        int t = i;
        while(t!=0){
            sum += t%10;
            t/=10;
        }
        if(sum == a)
            return i;
    }
    return 0;
}

int main()
{
    int n = 0;
    cin >> n;
    while(n--){
        int a;
        cin >> a;
        cout << k(a) << endl;
    }
    return 0;
}

UVA 1583 題目
UVA 1583 題目

廣告

作者:

一位 熱愛資工領域、喜歡好笑事物、偶爾打打網球 的學生 ! For A Better Me!

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.