大家帮忙给点意见..!!

babyding 2003-12-10 10:54:42
用c语言写:
一个人的年龄,假定是x,x的二次方是一个四位数,它的三次方是六位数.而这十个数正好是0 1 2 3 4 5 6 7 8 9;那他的年龄是多少?
...全文
98 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunlight1234 2003-12-10
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
void main()
{
int i,j,istart,iend;
char c2[6],c3[8];
int ioccupy[11];

istart=(int)pow(1000,0.5);
if((int)pow(100000,((double)1/3)>istart)) istart=(int)pow(100000,((double)1/3));
iend=(int)pow(9999,0.5);
if(iend>(int)pow(999999,((double)1/3))) iend=(int)pow(100000,((double)1/3));

for(i=istart;i<iend;i++)
{
for(j=0;j<10;j++) ioccupy[j]=0;
itoa((int)pow(i,2),c2,10);
itoa((int)pow(i,3),c3,10);
for(j=0;j<=5;j++)
{
if(j<4)
{
if(ioccupy[c2[j]-'0']!=0)
{
break;
}
else
{
ioccupy[c2[j]-'0']=1;
}
}

if(ioccupy[c3[j]-'0']!=0)
{
break;
}
else
{
ioccupy[c3[j]-'0']=1;
}
}
if(j>5) printf("%d\n",i);
}
}

WIN2000 VC6

69
arfi 2003-12-10
  • 打赏
  • 举报
回复
看来我写的太慢了

#include <stdio.h>
#include <math.h>

#define SUCCESS 0
#define FAILURE 1
int check(unsigned long int square, unsigned long cube)
{
char num[10] = {0};
int temp;

while(1)
{
temp = square%10;
square /= 10;
if(num[temp] == 1)
return FAILURE;
num[temp] = 1;
if(square == 0)
break;
}

while(1)
{
temp = cube%10;
cube /= 10;
if(num[temp] == 1)
return FAILURE;
num[temp] = 1;
if(cube == 0)
break;
}

return SUCCESS;
}

void main(void)
{
unsigned long int age, square, cube;

age = (unsigned long int)sqrt(1000);
while(1)
{
square = age*age;
if(square < 1000)
{
age++;
continue;
}
if(square >= 10000)
break;

cube = square*age;
if(cube < 100000L)
{
age++;
continue;
}
if(cube >= 1000000L)
break;
if(check(square, cube) == SUCCESS)
printf("The age may be: %lu\n", age);
age++;
}
}
babyding 2003-12-10
  • 打赏
  • 举报
回复
这两句 itoa(pingfang,str,10);
itoa(lifang,str[4],10);
itoa是什么函数。。
tuxw 2003-12-10
  • 打赏
  • 举报
回复
x的二次方是一个四位数 => x>=32
x的三次方是六位数 => 47<=x<100


范围不大,一个测试算了
#include <stdio.h>
#include <string.h>

void sort_str( char *str, int n ); // 对str前n位排序


int main()
{
int i;
char str[11];
char cmp[] = "0123456789";

for( i=46; i<100; ++i ) {
int tmp = i*i;
sprintf( str, "%4d%06d", tmp, tmp*i);// 格式化字符串
sort_str( str, 10 ); // 排序

// 比较
if( strcmp( str, cmp ) == 0 )
printf("Age = %d\n", i );
}

return 0;
}

void sort_str( char *str, int n )
{
int i, j;

for( i=0; i<n-1; ++i )
for( j=i+1; j<n; ++j )
if( str[j] < str[i] )
str[i] ^= str[j] ^= str[i] ^= str[j];
}

结果是 69
qiaojicheng 2003-12-10
  • 打赏
  • 举报
回复
IT、软件开发
babyding 2003-12-10
  • 打赏
  • 举报
回复
聪明,我们 的老师也是怎么说的。不过有一些烦。你是什么职业的????
qiaojicheng 2003-12-10
  • 打赏
  • 举报
回复
一个更简单办法。
for(int i = 32;i < 100;i ++)
{
int pingfang = i*i;
int lifang = i*i*i;
char str[11];
itoa(pingfang,str,10);
itoa(lifang,str[4],10);
str[10] = '\0';
如果字符产str中没有重复的字符,跳出即可
}
babyding 2003-12-10
  • 打赏
  • 举报
回复
不是。。我是用的turbo c这个软件
qiaojicheng 2003-12-10
  • 打赏
  • 举报
回复
你是16位机?不会吧?现在都是在windows下的32位机,int是占四个字节的,麻烦你到windows下编译运行。
babyding 2003-12-10
  • 打赏
  • 举报
回复
对于 qiaojicheng(乔)中的参数,能不能用int型,是不是可能会超界,int只有-32678--32767之间。
HandX 2003-12-10
  • 打赏
  • 举报
回复
这是诺伯特.维纳在他博士学位的授予仪式上出的!
诺伯特.维纳是20世纪最伟大的数学家之一!
他是信息论的前驱,又是控制论的奠基者,少年时他就智力超群,3岁会读写,7岁能攻读合理界但丁和达尔文的著作,14岁大学毕业,18岁获哈佛科学博士学位.
HandX 2003-12-10
  • 打赏
  • 举报
回复
正确答案:18.
hanyixin 2003-12-10
  • 打赏
  • 举报
回复

我看一个一个试吧,数字并不多,三次方是6位数,这个数就必须大于46了,又小于100。

qiaojicheng 2003-12-10
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <math.h>
/*
一个人的年龄,假定是x,x的二次方是一个四位数,它的三次方是六位数.
而这十个数正好是0 1 2 3 4 5 6 7 8 9;那他的年龄是多少?

根据题目可以判定他小于100岁,因为100*100=10000五位数了。
大于31岁,因为31*31是三位数,32*32是四位数。
省下的工作就是作个循环来求解了。
*/
int getage()
{
char array[10];
memset(array,0,sizeof(array));
for(int i = 32; i < 100; i++)
{
int pingfang = i*i;
int lifang = pingfang*i;
for(int j = 0;j < 4; j++)
{
array[j] = pingfang/(int)(pow(10,3-j));
pingfang = pingfang%(int)(pow(10,3-j));
}
for(int k = 0; k < 6; k++)
{
array[j+k] = lifang/(int)(pow(10,5-k));
lifang = lifang%(int)(pow(10,5-k));
}
bool ok = 1;
for(j = 0;j < 10;j++)
for(k = 0;k < 10; k++)
if((array[j]==array[k]) && (j != k))
{
ok = 0;
break;
}
if(ok == 1)
break;
}
return i;
}

void main()
{
int age = getage();
printf("%d",age);
}

如果只要一个答案的话,算出来的是69岁。
chenyan800522 2003-12-10
  • 打赏
  • 举报
回复
气死我了,费了一个多钟头,才想出一个超级弱智的算法,唉,谁让咱是菜鸟呢,发给虾们看看,搂主不愿意给分,就当我捐给希望工程了:)
#include <stdio.h>
main()
{
int i , j , k , pf , lf , temp ;
char s[10] ;
for ( i = 45 ; i < 200 ; i++)
{
pf = i * i ;
lf = i * i * i ;
if ( (pf >= 1000) && (pf < 10000) && (lf >= 100000) && (lf < 1000000) )
{
s[9] = pf / 1000 ;
s[8] = ( pf - s[9] * 1000 ) / 100 ;
s[7] = ( pf - s[9] * 1000 - s[8] * 100 ) / 10 ;
s[6] = pf - s[9] * 1000 - s[8] * 100 - s[7] * 10 ;//平方数的各位
s[5] = lf / 100000 ;
s[4] = ( lf - s[5] * 100000 ) / 10000 ;
s[3] = ( lf - s[5] * 100000 - s[4] * 10000 ) / 1000 ;
s[2] = ( lf - s[5] * 100000 - s[4] * 10000 - s[3] * 1000) / 100 ;
s[1] = ( lf - s[5] * 100000 - s[4] * 10000 - s[3] * 1000 - s[2] * 100) / 10 ;
s[0] = lf - s[5] * 100000 - s[4] * 10000 - s[3] * 1000 - s[2] * 100 - s[1] * 10 ;
//立方数的各位
for ( j = 0 ; j < 9 ; j++)
for ( k = j + 1 ; k <= 9 ; k++)
{
temp = s[j] - s[k] ;
if (temp == 0)
goto wrong;
}
printf ("年龄是:%d \n," , i) ;
}
wrong: continue ;
}

}

结果是69!
真他妈郁闷,逼得老子用goto!555~~~~

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧