【无标题】

该文是一道编程题,要求通过编写程序计算美国数学家维纳在1935-1936年访问中国清华大学时的年龄。题目给出的条件是他的年龄立方是一个4位数,年龄四次方是一个6位数,且这10个数字包含了从0到9每个数字恰好一次。程序通过穷举年龄在10到22之间的数值,检查其立方和四次方的数字特性,寻找符合条件的年龄。
摘要由CSDN通过智能技术生成

猜神童年龄
题目内容:

美国数学家维纳(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;
}

在这里插入图片描述
在编译器上能显示结果
但是做题软件运行显示结果不正确 代码可能存在什么问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值