Sicily: 1014. Specialized Four-Dig

Sicily: 1014. Specialized Four-Dig

找出10進制、12進制和16進制下所有位上的數字加起來都相等的四位數字。(有點小繞)
那麼很明顯,最簡單的就是從第一個合適的數字2992開始一直算到9999,一個個判斷。

代碼

#include <iostream>

using namespace std;

int sumofnotation(int a,int b)
{
    int ans=0;
    while(a!=0)
    {
        ans+=a%b;
        a=a/b;
    }
    return ans;
}

int main()
{
    for(int i=2992;i<=9999;i++)
    {
        int a=sumofnotation(i,10);
        int b=sumofnotation(i,12);
        int c=sumofnotation(i,16);
        if(a==b&&a==c)
            cout<<i<<endl;
    }
    return 0;
}

這是最快想到的也是最笨的方法,有沒有其他方法呢?遇到類似的題目,一般第二個會想到的就是能不能只算出符合要求的數字,而其他不符合要求的數字根本不需要計算呢?

代碼

#include<iostream>
using namespace std;
int main()
{
    cout<<2992<<endl<<2993<<endl<<2994<<endl<<2995<<endl<<2996<<endl<<2997<<endl<<2998<<endl<<2999<<endl<<4470<<endl<<4471<<endl<<4472<<endl<<4473<<endl<<4474<<endl<<4475<<endl<<4970<<endl<<4971<<endl<<4972<<endl<<4973<<endl<<4974<<endl<<4975<<endl<<5460<<endl<<5461<<endl<<5462<<endl<<5463<<endl<<5464<<endl<<5465<<endl<<5466<<endl<<5467<<endl<<5468<<endl<<5469<<endl<<5960<<endl<<5961<<endl<<5962<<endl<<5963<<endl<<6456<<endl<<6457<<endl<<6458<<endl<<6459<<endl<<7440<<endl<<7441<<endl<<7442<<endl<<7443<<endl<<7444<<endl<<7445<<endl<<7446<<endl<<7447<<endl<<7448<<endl<<7449<<endl<<7940<<endl<<7941<<endl<<7942<<endl<<7943<<endl<<8436<<endl<<8437<<endl<<8438<<endl<<8439<<endl<<9424<<endl<<9425<<endl<<9426<<endl<<9427<<endl<<9428<<endl<<9429<<endl<<9924<<endl<<9925<<endl<<9926<<endl<<9927<<endl<<9928<<endl<<9929<<endl;
    return 0;
}

答案是沒有規律……哈哈哈,網上有人蛋疼把所有的答案都打上去了,時間複雜度是O(1)。無敵。

發佈了27 篇原創文章 · 獲贊 0 · 訪問量 7950
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章