返回信息流一个5位数,乘以4之后得到的是原数的逆序,编写程序输出满足要求的数
要求: 描述算法,并给出程序(编程语言任意选择
这是一条镜像帖。来源:北邮人论坛 / sse / #4575同步于 2007/10/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SSE机器人发帖
向牛人请教一个小小的招聘编程题
yibo
2007/10/12镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
一般每种语言都有数字和字符串相互转换的函数,逆序这种东西估计只能通过字符串的方式比较吧。判断是否逆序可以写个小函数。剩下的就只是循环所有五位数乘4判断了了。
时间关系我只能给你一个解题思路。
此数可设为i*10000+j*1000+k*100+m*10+n
由题设可以分析道以下几点:
1.应该是偶数,此数末位是0,2,4,6,8
2.n<i (此数>得数)
3.5位数被除以后还是5位数,说明:
99999/4=24999.75
40000/4=10000
即此数应该是99996--40000之间的能被4整除的数,且最低位要等于2,4,6,8。
得数区间为24999--10000之间的数,且最低位要等于4-9之间的数。
由上行,可知得数的最高位的数是2或1,可以看出此数末位不能是大于2的数,因此此数的最低位只能是=2。(偶数)
此时得到的数区间为24999--20004之间的数,且得数的最低位要等于4-9之间的数。
可以根据得到的数进行遍历来逐个判断比较。共进行24999-20004=4995次判断。
这其中的最低位为0,1,2,3的数可以判断后直接派除。那么实际要判断的数其实只有
10-4=6
6/10=0.6
4995*0.6=2997次
进行3千次左右的判断,这应该是一瞬间的事了。
我觉得这道题其实就是根据题设来进行算法优化,程序是很好实现的。
不错
【 在 liu1hong1yu (虹雨) 的大作中提到: 】
: 时间关系我只能给你一个解题思路。
: 此数可设为i*10000+j*1000+k*100+m*10+n
: 由题设可以分析道以下几点:
: ...................
赞,真细致,应该就是如此...
【 在 liu1hong1yu 的大作中提到: 】
: 时间关系我只能给你一个解题思路。
: 此数可设为i*10000+j*1000+k*100+m*10+n
: 由题设可以分析道以下几点:
: ...................
【 在 liu1hong1yu 的大作中提到: 】
: 时间关系我只能给你一个解题思路。
: 此数可设为i*10000+j*1000+k*100+m*10+n
: 由题设可以分析道以下几点:
: ...................
赞。。。。。
List results=new ArrayList();
for(int five_old=10000;five_old<=20000;five_old++)
{
int five_new=five_old*5;
String oldStr=Integer.valueOf(five_old).toString();
String newStr=Integer.valueOf(five_new).toString();
char[] oldChars=oldStr.toCharArray();
char[] newChars=newStr.toCharArray();
boolean yes=true;
for(int i=0;i<5;i++)
{
if(!(oldChars[i]==newChars[4-i]))
yes=false;
}
if(yes==true)
results.add(oldStr);
}
看错题了,
修改如下:
(1) for(int five_old=10000;five_old<=20000;five_old++) 改为
for(int five_old=10000;five_old<=25000;five_old++)
(2) int five_new=five_old*5; 改为
int five_new=five_old*4;