奇妙的数字 枚举
视频解析 2015-C-C题6奇妙的数字_哔哩哔哩_bilibili
code
首先先把i的平方和立方都转为字符串,然后再全部插入到set里面进行去重,如果经过去重之后是10位数,并且插入之前的字符串个数就是10位数,说明没有重复的要去掉,那么这10位数肯定就是0~9,这个数就是答案。
#include<iostream>
#include<set>
#include<sstream>
#include<string>
using namespace std;
void i2s(int num,string& str) //用引用返回就不用再用返回值了
{
stringstream ss;
ss<<num;
ss>>str;
}
bool check(string str)
{
set<char>s;
for(int i=0;i<str.size();i++)
s.insert(str[i]);
return s.size()==10&&str.size()==10; //如果set里面是10位不重复的数,并且str里面也正好是10位数,说明str里面存的就是0~9
}
int main()
{
//从1枚举到10000
for(int i=0;i<1000;i++)
{
//先把i的平方和立方都转为字符串
string s1,s2;
i2s(i*i,s1);
i2s(i*i*i,s2);
//把平方和立方的字符串拼接起来,检查是否是0~9十位数并且不重复
if(check(s1+s2))
{
cout<<i<<endl;
break;
}
}
return 0;
}
验证
69的平方=4761 69的立方=328509
观察发现并没有重复的数字,并且包含了0~9的所有数字