HDU 4541 Ten Googol
来源:互联网 发布:广州数控980ta怎么编程 编辑:程序博客网 时间:2024/06/06 08:34
Ten Googol
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 160 Accepted Submission(s): 81
Problem Description
Google的面试题向来以古怪闻名,延续自技术公司用逻辑题测试求职者的古老传统.现在我们来看看下面这题:
面试官在房间的白板上写下6个数字:
10,9,60,90,70,66
现在的问题是,接下来该出现什么数字?
想不出来了吧?不要再从数学的角度想了,把这些数字用正常的英文拼写出来:
ten(10)
nine(9)
sixty(60)
ninety(90)
seventy(70)
sixty-six(66)
我们可以惊奇的发现这些数字都是按字母的多少排序的!再仔细一看:ten(10)不是唯一一个可以用3个字母拼出的数字,还有one(1),two(2),six(6);nine(9)也不是唯一一个用4个字母拼出的数字,还有zero(0),four(4)和five(5).而题目中的数字,每一个都是用给定长度的字母拼写出来的数字里最大的一个!
现在我们回到原题:接下去该是哪个数字呢?
我们注意到,66对应的字母长度为8(特别提醒:连接符不算在内),不管之后跟着哪个数,它都应该有9个字母,而且应该是9个字母拼出的数字里最大的。仔细找一下,你可能就会得出ninety-six(96)。不可能是100以上的数字,因为它会以one hundred开头,这已经有10个字母了。
对于Google面试官来说,96只不过是可以接受的答案之一,另一个更好的回答是:
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
也就是10的101次方,即:ten googol(有关Googol的资料可以在wiki中了解)。据说当年Google这个名字的创建也是由googol演化过来的(江湖传说肖恩拼写时老爱出错,本来想注册googol或者googolplex,结果由于手误就注册了google)。
好了,当你解出了这道难题,面试官的下一道题目接踵而至——给你两个正整数N和M,要求你输出由N个字母组成的第M大数(我们只考虑0~99和googol级别的数字)。
注意:这里所说的“第M大数”是指从小到大的第M大,具体参见Sample
面试官在房间的白板上写下6个数字:
10,9,60,90,70,66
现在的问题是,接下来该出现什么数字?
想不出来了吧?不要再从数学的角度想了,把这些数字用正常的英文拼写出来:
ten(10)
nine(9)
sixty(60)
ninety(90)
seventy(70)
sixty-six(66)
我们可以惊奇的发现这些数字都是按字母的多少排序的!再仔细一看:ten(10)不是唯一一个可以用3个字母拼出的数字,还有one(1),two(2),six(6);nine(9)也不是唯一一个用4个字母拼出的数字,还有zero(0),four(4)和five(5).而题目中的数字,每一个都是用给定长度的字母拼写出来的数字里最大的一个!
现在我们回到原题:接下去该是哪个数字呢?
我们注意到,66对应的字母长度为8(特别提醒:连接符不算在内),不管之后跟着哪个数,它都应该有9个字母,而且应该是9个字母拼出的数字里最大的。仔细找一下,你可能就会得出ninety-six(96)。不可能是100以上的数字,因为它会以one hundred开头,这已经有10个字母了。
对于Google面试官来说,96只不过是可以接受的答案之一,另一个更好的回答是:
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
也就是10的101次方,即:ten googol(有关Googol的资料可以在wiki中了解)。据说当年Google这个名字的创建也是由googol演化过来的(江湖传说肖恩拼写时老爱出错,本来想注册googol或者googolplex,结果由于手误就注册了google)。
好了,当你解出了这道难题,面试官的下一道题目接踵而至——给你两个正整数N和M,要求你输出由N个字母组成的第M大数(我们只考虑0~99和googol级别的数字)。
注意:这里所说的“第M大数”是指从小到大的第M大,具体参见Sample
Input
输入数据第一行有一个数字T,代表有T组数据。
每组数字由两个正整数N和M组成。
[Technical Specification]
1<=T<=100
3<=N<=9
1<=M<=100
每组数字由两个正整数N和M组成。
[Technical Specification]
1<=T<=100
3<=N<=9
1<=M<=100
Output
首先输出case数(见sample),接着输出由N个字母组成的第M大数,如果没有,则输出-1。
Sample Input
63 13 24 14 25 19 100
Sample Output
Case #1: 1Case #2: 2Case #3: 0Case #4: 4Case #5: 3Case #6: -1
Source
2013腾讯编程马拉松复赛第三场(3月31日)
Recommend
liuyiding
AC代码:
#include<stdio.h>int main(){ int T,N,M,i,j; int a[4]={1,2,6,10}; int b[4]={0,4,5,9}; int c[6]={3,7,8,40,50,60}; int d[6]={11,12,20,30,80,90}; int e[3]={15,16,70}; int f[13]={13,14,18,19,41,42,46,51,52,56,61,62,66}; int g[22]={17,21,22,26,31,32,36,44,45,49,54,55,59,64,65,69,81,82,86,91,92,96}; scanf("%d",&T); for(i=1;i<=T;i++) { scanf("%d%d",&N,&M); if(N==3) { if(M>4) printf("Case #%d: -1\n",i); else printf("Case #%d: %d\n",i,a[M-1]); } if(N==4) { if(M>4) printf("Case #%d: -1\n",i); else printf("Case #%d: %d\n",i,b[M-1]); } if(N==5) { if(M>6) printf("Case #%d: -1\n",i); else printf("Case #%d: %d\n",i,c[M-1]); } if(N==6) { if(M>6) printf("Case #%d: -1\n",i); else printf("Case #%d: %d\n",i,d[M-1]); } if(N==7) { if(M>3) printf("Case #%d: -1\n",i); else printf("Case #%d: %d\n",i,e[M-1]); } if(N==8) { if(M>13) printf("Case #%d: -1\n",i); else printf("Case #%d: %d\n",i,f[M-1]); } if(N==9) { if(M>26) printf("Case #%d: -1\n",i); else if(M==26) printf("Case #%d: 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n",i); else if(M==25) printf("Case #%d: 60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n",i); else if(M==24) printf("Case #%d: 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n",i); else if(M==23) printf("Case #%d: 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n",i); else printf("Case #%d: %d\n",i,g[M-1]); } }return 0;}
- hdu 4541 Ten Googol
- HDU 4541 Ten Googol
- HDU-4541-Ten Googol
- hdu 4541 Ten Googol 小水题
- hdu 4541 Ten Googol (水题)
- Ten Googol
- HDU4541 Ten Googol
- HDU4541-Ten Googol(枚举)
- Googol
- ten
- ten
- Googol String
- HDU 2653 Waiting ten thousand years for Love
- HDU 2653 Waiting ten thousand years for Love
- HDU 2619 - Love you Ten thousand years (数论)
- HDU 2653Waiting ten thousand years for Love
- Google 和 Googol - 背景趣味
- Hdu 2579 Dating with girls(2) && hdu 2653 Waiting ten thousand years for Love【Bfs】
- 聚类算法的分类
- dedecms的模板解析与生成原理研究成果一:ParseTemplete方法的浅析
- StringUtils小结,供以后参考
- SKB_BUFF整理笔记
- 机器学习-线性回归以及MATLAB octave实现
- HDU 4541 Ten Googol
- Python 代码性能优化技巧
- 移植人脸识别 到 davince codec engine 记录
- mysql清空表的方法介绍
- mask 和 layer绘图相关
- 手表时针,日期调节备忘
- ArcMap求四至点坐标的方法(最小外接矩形范围)
- Oracle SQL性能优化
- exception setting property value with CGLIB 解决方案 .