您的位置:首页 > 其它

Sicily: 1014. Specialized Four-Dig

2017-02-25 22:11 393 查看

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)。无敌。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: