大神能帮我用c语言编程一下吗??最好能附上详解 谢谢啦

“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”求“我”的年龄?

#include<stdio.h>
void main()
{
int age,age3,age4,cnt=0;
char string[11],*p,i;
for(age=10;age<40;age++)
{
age3=age*age*age;
age4=age3*age;
if(age3<1000||age3>9999||age4<100000||age4>999999)
continue;
for(p=string;p<&string[4];p++)
{
*p=age3%10+'0';
age3=age3/10;
}
for(;p<&string[10];p++)
{
*p=age4%10+'0';
age4=age4/10;
}
cnt=0;
for(i='0';i<='9';i++)
{
for(p=string;p<&string[10];p++)
{
if(*p==i)
{
cnt++;
break;
}
}
}
if(cnt==10)
printf("%d\n",age);
}
getchar();
}

简单估算一下可以知道age应该大于10,小于40,所以设置age的循环范围;

计算age的三次方和四次方,先判断满不满足位数条件,不满足直接pass;

然后将计算的两个数的每一位数转换为数字字符,都存到一个字符串数组中;

从0到9依次从字符串比较,发现字符串含有该数,计数器自加1,跳出循环;

如果计数器最终计数为10,即为该字符串中含有0到9的数,满足条件,则输出当前的age值。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-16
10^3=1000;
21.54^3=9999;
17.78^4=100000;
31.62^4=999999;
所以年龄在18~21之间,即18,19,20,21;
20不可能了,N次方会出N个0;
21不可能了,平方441;
19不可能了,4次方130321;
18嘛,3次方5832,4次方104976,正解;
楼主好年轻~
第2个回答  2014-10-17
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
int cmp(const void *a, const void *b){
return *(char *)a-*(char *)b;
}
void main(void){
int i,k;
char a[11],b[7];
k=(int)pow(987654,0.25);
for(i=(int)pow(100000,0.25);i<k;i++){
strcat(itoa(i*i*i,a,10),itoa(i*i*i*i,b,10));
qsort(a,10,sizeof(a[0]),cmp);
if(!strcmp(a,"0123456789")) break;
}
printf("Oh, you are %d years old...\n",i);
}本回答被提问者和网友采纳
第3个回答  2014-10-16
int age=0;
int x=0;
int a=pow(age,3);
int b=pow(age,4);
int m[10];
while(x!=0)
{
for(int i=1,i<5,i++)

{
int x;
x=a%pow(10,i);
a=a-x;
m[i-1]=x/pow(10,i-1);
}
for(int j=1,j<7,j++)
{
int x;
x=b%pow(10,j);
b=b-x;
m[3+j]=x/pow(10,j-1);
}
for(int y=0,y<10,y++)
{
for(int z=0,z<y,z++)
{
if(m[y]==m[z])
{
x=1;
}
}
}
age++;
}
试试把,我这没法验证
第4个回答  2014-10-16
#include <stdio.h>
int main()
{
int x=0;
int i_4[4];
int i_6[6];

for(int i=22;i<100;i++)
{
if(i*i>999)
{
i_4[0]=(i*i)%10;
i_4[1]=((i*i)%100-i_4[0])/10;
i_4[2]=((i*i)%1000-i_4[0]-i_4[1])/100;
i_4[3]=(i*i)/1000%10;
if(i*i*i>99999)
{
i_6[0]=(i*i*i)%10;
i_6[1]=((i*i*i)%100-i_4[0])/10;
i_6[2]=((i*i*i)%1000-i_4[0]-i_4[1])/100;
i_6[3]=(i*i*i)/1000%10;
i_6[4]=(i*i*i)/10000%10;
i_6[5]=(i*i*i)/100000%10;
for(int ii=1;ii<10;ii++)
{
for(int iii=0;iii<6;iii++)
{
if(iii<4)
{
if(i_4[iii]==ii)
{
break;
}
}
if(i_6[iii]==ii)
{
break;
}
if(iii==5)
{
x++;
break;
}
}
if(x>0)
{

break;
}
}
if(x==0)
{
printf("%d,%d,%d",i,i*i,i*i*i);
}
x=0;
}
}

}
}
时间紧 算法有点乱
相似回答