[蓝桥杯2015初赛]奇妙的数字的c语言解答

题目描述
小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?
输出
请输出该数字,不要输出任何多余的内容。

这里我简要说明一下这道题的意思,刚开始我都没看懂。意思是,这道题是求一个数字的平方和立方中,存在有10位数字0~9。可以把平方和立方转化成数组的形式,就比较容易查找里面是否包含了这些数字。

#include
int main()
{
	int i,j,k,jec,m,n;
	int a,b,aa[10],bb[10];
	int cc[10] = {1,2,3,4,5,6,7,8,9,0};//设置这10位数字 
	for(i = 50; i <= 100; i++)//因为是10个数字所以大概在这个区间 
	{
		a = i*i;
		b = i*i*i;
		m = 0;
		while(a)     //将数字的平方转化为数组,好查找 
		{
			aa[m] = a%10;
			a = a/10;
			m++;
	    }
		n = 0;
		while(b)    //将数字的立方转化为数组,好查找 
		{
			bb[n] = b%10;
			b = b/10;
			n++;
		}
		if(m + n == 10)   //判断是否有10位数字 
		{
		    for(j = m; j < m+n; j++)
		    {
			    aa[j] = bb[j-m];    //合并两个数组 
		    }
		    for(j = 0; j < 10; j++)
		    {
			    jec = 0;  //设置判断的一个标准 
			    for(k = 0; k < 10; k++)
			    {
				    if(cc[j] == aa[k])
				    {
					    jec = 1;
				    }
			    }
			    if(jec == 0)
			        break;
		    }    
		    if(jec == 1)  //如果为1就说明10个数字数组里都存在 
		        break;
		}
	}
	printf("%d\n",i);
	return 0;
}

你可能感兴趣的:(蓝桥杯题目,算法)