题目内容:
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这
10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程算出他当时到底有多年轻。
#include <stdio.h>
int main()
{
int age,num,i,j,f=1;
int a[10];
for (age = 10; age <= 22; age++)
{
num=age*age*age+age*age*age*age*10000;//把4位数和6位数转化成一个十位数
for (i = 0; i < 10; i++)//把每一位数装进数组里,a[0]就是个位
{
a[i]=num%10;
num=num/10;
}
for (i= 0; i <9; i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]==a[j])
{
f = 0;
break;
}
}
}
if(f)
printf("age=%d\n",age);
}
return 0;
}
答案是18,修改如下,供参考:
#include <stdio.h>
int main()
{
int age, num, i, j;
int a[10] = {0};
for (age = 10; age <= 22; age++)
{
num = age * age * age;
while(num){
a[num % 10]++;
num /= 10;
}
num = age * age * age * age;
while (num) {
a[num % 10]++;
num /= 10;
}
for (i = 0; i < 10; i++)
{
if (a[i] != 1)
break;
}
if (i >= 10) {
printf("age=%d\n", age);
break;
}
for (i = 0; i < 10; i++)
a[i] = 0;
}
return 0;
}
答案是17吧,我是在你你这个程序上改的,不过你这个程序的思想可能有点不严谨,但是能算出来。
#include <stdio.h>
int main()
{
int age, num, i, j, f ;
int a[10];
int b[11] = { 0,1,2,3,4,5,6,7,8,9 };
for (age = 17; age <= 38; age++)
{
num = age * age * age + age * age * age * age * 10000;//把4位数和6位数转化成一个十位数
for (i = 0; i < 10; i++)//把每一位数装进数组里,a[0]就是个位
{
a[i] = num % 10;
num = num / 10;
}
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (a[i] == b[j])
{
b[j] = 11;
}
}
}
for (i = 0; i < 10; i++)
{
if (b[i] != 11)
{
f = 0;
}
else
{
f = 1;
}
}
if (f == 1)
{
printf("age=%d\n", age);
break;
}
}
return 0;
}
```c
```
不知道你这个问题是否已经解决, 如果还没有解决的话: