题目要求:
奇妙的数字
小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?
请填写该数字,不要填写任何多余的内容。
解题思路:
利用集合中的元素不能重复,枚举i,将i^2和i^3的每位数字都存到集合st中,如果st的大小为10,则符合条件。
#include<iostream>
#include<cmath>
#include<set>
using namespace std;
//set<int> st;//注集合st不能是全局的!一开始把集合的声明写在了这里,
//这样的话不就是每个i取得的一些数都放进了这里面嘛!
//这样的话st.size()退出就不是这个i符合条件了,
//而是它和它前面的i们一起的取得的数字满10个
int a,b,c,d,e,f,g,h,m,n;
int main()
{
//它的平方和立方一共是10位数,则它的平方是4位数,它的立方是6位数,则它自己是两位数
for(int i=31;i<=99;i++)
{
set<int> st;//注集合st不能是全局的!而是每枚举一个i有一个集合!
int x=i*i;
int y=i*i*i;
if(x>=1000&&y>=100000)
{
a = x/1000;
st.insert(a);
b = x%1000/100;
st.insert(b);
c = x%100/10;
st.insert(c);
d = x%10;
st.insert(d);
e = y/100000;
st.insert(e);
f = y%100000/10000;
st.insert(f);
g = y%10000/1000;
st.insert(g);
h = y%1000/100;
st.insert(h);
m = y%100/10;
st.insert(m);
n = y%10;
st.insert(n);
//cout<<st.size()<<endl;
if(st.size()==10)
{
cout<<i<<endl;
return 0;
}
}
}
return 0;
}