当前位置: 代码迷 >> C语言 >> [求助]做个简单的题目
  详细解决方案

[求助]做个简单的题目

热度:324   发布时间:2007-01-27 15:36:00.0
[求助]做个简单的题目
一人年龄的3次方是4位数 4次方是6位数 这两个数中没有重复的数字 请求出该人年龄
要求用穷举法 过程一定要简单
----------------解决方案--------------------------------------------------------

呵呵,俺先来个简单的:

#include <stdio.h>

int estimate(long num,int unit)            /* 判断数字是否有重复的 */
{
int data[6];
int i,j;
for(i = 0; i < unit; i++)          /* 分解各位上的数字,保存在数组中 */
{
data[i] = num % 10;
num /= 10;
}
for(i=0;i<unit-1;i++)
for(j=i+1;j<unit;j++)
if(data[i] == data[j])
return 0;              /* 有重复数字,返回0 */
return 1;
}


int main()
{
int age;
long temp1,temp2;
for(age=1;age<200;age++)
{
temp1=age*age*age;
temp2=temp1*age;
if(temp1 >= 1000 && temp1 <= 9999 && temp2 >= 100000 && temp2 <= 999999)
if(estimate(temp1,4) && estimate(temp2,6))
printf("%d ",age);
}
printf("\n");
return 0;
}

[此贴子已经被作者于2007-1-27 18:23:46编辑过]


----------------解决方案--------------------------------------------------------
以下是引用hiaod在2007-1-27 17:30:00的发言:

呵呵,俺先来个简单的:

#include <stdio.h>

int estimate(long num,int unit)            /* 判断数字是否有重复的 */
{
int data[6];
int i,j;
for(i = 0; i < unit; i++)          /* 分解各位上的数字,保存在数组中 */
{
data[i] = num % 10;
num /= 10;
}
for(i=0;i<unit-1;i++)
for(j=i+1;j<unit;j++)
if(data[i] == data[j])
return 0;              /* 有重复数字,返回0 */
return 1;
}


int main()
{
int age;
long temp1,temp2;
for(age=1;age<200;age++)
{
temp1=age*age*age;
temp2=temp1*age;
if(temp1 >= 1000 && temp1 <= 9999 && temp2 >= 100000 && temp2 <= 999999)
if(estimate(temp1,4) && estimate(temp2,6))
printf("%d ",age);
}
printf("\n");
return 0;
}


思路懂了 但是把你的代码放到win-tc里面好象有错误
编译不出来啊


----------------解决方案--------------------------------------------------------
俺编译没有出错呀。


----------------解决方案--------------------------------------------------------

哦,是俺在注释前面加入了中文状态下的空格不能被编译器识别。下面这个就行了:(内容没有作任何修改)


#include <stdio.h>

int estimate(long num,int unit) /* 判断数字是否有重复的 */
{
int data[6];
int i,j;
for(i = 0; i < unit; i++) /* 分解各位上的数字,保存在数组中 */
{
data[i] = num % 10;
num /= 10;
}
for(i=0;i<unit-1;i++)
for(j=i+1;j<unit;j++)
if(data[i] == data[j])
return 0; /* 有重复数字,返回0 */
return 1;
}


int main()
{
int age;
long temp1,temp2;
for(age=1;age<200;age++)
{
temp1=age*age*age;
temp2=temp1*age;
if(temp1 >= 1000 && temp1 <= 9999 && temp2 >= 100000 && temp2 <= 999999)
if(estimate(temp1,4) && estimate(temp2,6))
printf("%d ",age);
}
printf("\n");
getch();
return 0;
}


----------------解决方案--------------------------------------------------------
过路的来学习下思路
----------------解决方案--------------------------------------------------------

恩 谢谢 问题解决


----------------解决方案--------------------------------------------------------

#include<stdio.h>

int main(void)
{
long long b;

for(b=1;b<100;b++)
{
if( (b*b*b) > 999 && (b*b*b) < 10001 && (b*b*b*b) > 99999
&& (b*b*b*b) < 1000001 && b%11 !=0)
{
printf("the age is:%lld\n",b);

}
}


getch();
return 0;
}


----------------解决方案--------------------------------------------------------
楼上的运算结果是18 52 90 132
但是90和132的三次方明显不是四位数啊.
----------------解决方案--------------------------------------------------------

呵呵,是俺的错了,正确答案应该只有一个:18
我只改了一个地方,见红色处:

#include <stdio.h>

int estimate(long num,int unit)            /* 判断数字是否有重复的 */
{
int data[6];
int i,j;
for(i = 0; i < unit; i++)          /* 分解各位上的数字,保存在数组中 */
{
data[i] = num % 10;
num /= 10;
}
for(i=0;i<unit-1;i++)
for(j=i+1;j<unit;j++)
if(data[i] == data[j])
return 0;              /* 有重复数字,返回0 */
return 1;
}


int main()
{
int age;
long temp1,temp2;
for(age = 1;age < 200;age++)
{
temp1 = (long)age * age * age;
temp2 = temp1 * age;
if(temp1 >= 1000 && temp1 <= 9999 && temp2 >= 100000 && temp2 <= 999999)
if(estimate(temp1,4) && estimate(temp2,6))
printf("%d ",age);
}
printf("\n");
return 0;
}

如果不用强制类型转换,则可以将年龄age设为长整形。

[此贴子已经被作者于2007-1-30 2:04:54编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案