猜神童年龄
题目内容:
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这
10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程算出他当时到底有多年轻。
【解题思路】:因为已知年龄的立方是一个4位数字,所以可以推断年龄的范围在10到22之间,因此确定穷举范围为10到22。如果年龄还满足“年龄的4次方是一个6位数”这个条件,则先计算年龄的立方值的每一位数字,从低位到高位分别保存到变量b1,b2,b3,b4
中,再计算年龄的4次方值的每一位数字,从低位到高位分别保存到变量a1,a2,a3,a4,a5,a6中。如果上述10个数字互不相同,则必定是包含了从0到9这10个数字并且每个都恰好出现1次,因此只要判断上述10个数字互不相同,即可确定这个年龄值为所求。
输出格式:“age=%d\n”
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
时间限制:500ms内存限制:32000kb
#include<stdio.h>
int * age_pow(int age_c,int * array);
int main()
{
int age=0,i=0,count=0,copy_age=0;int array[6]={0};
int * arr;
for(age=10;age<=20;age++)
{
int x=age*age*age;
copy_age=x;
//printf("copy_age=%d\n",copy_age);
while(copy_age)
{//while
if(copy_age==x)
i=3;
array[i]=copy_age%10;
copy_age=copy_age/10;
i--;
}//while
//printf("%d %d %d %d\n",array[0],array[1],array[2],array[3]);
if((array[0]!=array[1])&&(array[0]!=array[2])&&(array[0]!=array[3]))
{
arr=age_pow(age,array);
if(arr[6]==1)
{
printf("age=%d\n",age);
}
count++;
}//if
}//for
}//main
int * age_pow(int age_c,int * array)
{
int brray[10]={0};
int age_pow=0,jicount=0,temp=0,am=0;
int y=age_c*age_c*age_c*age_c;
age_pow=y;
while(age_pow)
{//while
if(age_pow==y)
jicount=0;
for(int m=0;m<4;m++)
{//for
temp=0;
if((age_pow%10)!=array[m])
temp=1;
}//for
if(temp==1)
{//if
brray[jicount]=age_pow%10;
age_pow=age_pow/10;
//printf("brray=%d\n",brray[jicount]);
jicount++;
}//if
else
break;
}//while
if(jicount==6)
{
for(int a=1;a<6;a++)
{
if(brray[0]!=brray[a])
am++;
}
if(am==5)
{
brray[6]=temp;
brray[7]=age_c;
//printf("age_pow=%d %d\n",y,jicount);
}
}
else
{
brray[6]=0;
brray[7]=0;
}
return brray;
}
在编译器上能显示结果
但是做题软件运行显示结果不正确 代码可能存在什么问题