题目描述:
小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?
输出格式:
请输出该数字,不要输出任何多余的内容。
分析:
首先缩小这个数的范围。
一位数最大的是9,9*9=81,9*9*9=729,位数为5,不符合。
两位数最大的是99,99*99=9801,99*99=970299,位数是符合的。
三位数最小的是100,100*100=10000,100*100*100=1000000,位数超过10,不符合。
因此这个数必然是一个两位数,不难发现10~46的平方和立方加起来不够10个数字,从47开始刚好由十位数字组成,所以我们最终将这个数字的范围缩小到47~99。
- 注意:本题涉及到排序,使用c++中的sort函数会比c方便很多。
我的题解:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a,b,A[10],B[6],i,j,k,l,flag = 1;
int C[10] = {0,1,2,3,4,5,6,7,8,9};
for(i = 47;i < 99;i++)
{
a = i*i;
b = i*i*i;
j = 0;//记录A数组元素个数
while(a)//将平方数存入数组
{
A[j++] = a%10;
a/=10;
}
k = 0;//记录B数组元素个数
while(b)//将立方数存入数组
{
B[k++] = b%10;
b/=10;
}
for(l = 0;l < k;l++)//合并两个数组
{
A[l+j] = B[l];
}
sort(A,A+10);//排序
flag = 1;
for(l = 0;l < 10;l++)
{
if(A[l] != C[l])
flag = 0;
}
if(flag == 1)
break;
}
cout << i << endl;
return 0;
}