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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章