淘宝面试题猜数字游戏
来源:互联网 发布:淘宝网拍卖车辆提档 编辑:程序博客网 时间:2024/04/30 09:10
开源中国
代码分享
- 当前位置:
- 代码分享 » Python » 编程基础
淘宝面试题猜数字游戏
yangst 发布于 2012年08月21日 14时,17评/2055阅
CNT 看到一个帖子分享的淘宝的一道笔试题,猜数字的问题,1-100随机取一个数, 如果猜的数小了,系统提示你猜小了,如果猜大了,系统只会提示你猜错了,并且以后也不会提示你猜小了或猜大了,问能不能以最少的次数猜对,并且次数是多少,还有第一次应该猜几。刚开始学python,就简单把游戏过程写了一下。。。。纯菜鸟。。。。。。。。就当练手了
传完才发现我已经把次数限制在14了。。。不知道有没其他答案。
传完才发现我已经把次数限制在14了。。。不知道有没其他答案。
标签: <无>
代码片段(1)[全屏查看所有代码]
1. [文件] guess.py ~ 485B 下载(19)
01
#!/usr/bin/env python
02
03
#guess a number between 1-100
04
#if it is smaller ,tell you smaller
05
#if it is bigger,just tell you are wrong
06
07
from
random
import
randint
08
09
num
=
randint(
1
,
100
)
10
print
num
11
flag
=
True
12
count
=
14
13
while
count>
0
:
14
count
-
=
1
;
15
number
=
int
(
raw_input
(
'input the number:'
))
16
if
number
=
=
num:
17
print
'good!!'
18
break
19
else
:
20
if
number<num
and
flag:
21
print
'smaller,please pick a bigger one'
22
else
:
23
print
'wrong'
24
if
flag:
25
flag
=
False
26
else
:
27
print
'you lose'
举报
开源中国-程序员在线工具:API文档大全(120+)JS在线编辑演示 二维码 更多»
发表评论回到顶部网友评论(17)
- 1楼:飞晏 发表于 2012-08-21 15:58 回复此评论我也是刚学了2天python,不过我觉得这个题目和语言貌似无关。考察的是二分算法吧,第一个数字肯定输入50了,我就顺着楼主的代码copy一份,很多基础我还不明白。测试:
01
#!/usr/bin/env python
02
03
#guess a number between 1-100
04
#if it is smaller ,tell you smaller
05
#if it is bigger,just tell you are wrong
06
07
from
random
import
randint
08
09
num
=
randint(
1
,
100
)
10
count
=
0
11
12
while
2
>
1
:
13
count
+
=
1
14
number
=
int
(
raw_input
(
'input the number:'
))
15
if
number
=
=
num:
16
print
'good!'
17
print
'\n'
18
print
count
19
print
'times'
20
break
21
else
:
22
if
number<num
and
flag:
23
print
'smaller'
24
else
:
25
print
'bigger'
1
feiyan<a href=
"http://my.oschina.net/u/575662"
target=
"_blank"
rel=
"nofollow"
>@FPC</a> :$ python guess.py
2
input the number:50
3
bigger
4
input the number:25
5
smaller
6
input the number:37
7
good!
8
3
9
times
- 2楼:李师叔 发表于 2012-08-21 16:05 回复此评论猜大了就输了,猜小了可以继续?那这就不是二分算法了啊
- 3楼:yangst 发表于 2012-08-21 20:23 回复此评论不是这样的,如果有一次猜大了,程序就不会提示你是猜大了还是猜小了,只告诉你是猜对了还是猜错了,并且这次以后不论猜大了猜小了都只提示猜错了。。。
引用来自“飞晏”的评论
我也是刚学了2天python,不过我觉得这个题目和语言貌似无关。考察的是二分算法吧,第一个数字肯定输入50了,我就顺着楼主的代码copy一份,很多基础我还不明白。测试:01
#!/usr/bin/env python
02
03
#guess a number between 1-100
04
#if it is smaller ,tell you smaller
05
#if it is bigger,just tell you are wrong
06
07
from
random
import
randint
08
09
num
=
randint(
1
,
100
)
10
count
=
0
11
12
while
2
>
1
:
13
count
+
=
1
14
number
=
int
(
raw_input
(
'input the number:'
))
15
if
number
=
=
num:
16
print
'good!'
17
print
'\n'
18
print
count
19
print
'times'
20
break
21
else
:
22
if
number<num
and
flag:
23
print
'smaller'
24
else
:
25
print
'bigger'
1
feiyan<a href=
"http://my.oschina.net/u/575662"
target=
"_blank"
rel=
"nofollow"
>@FPC</a> :$ python guess.py
2
input the number:50
3
bigger
4
input the number:25
5
smaller
6
input the number:37
7
good!
8
3
9
times
- 4楼:yangst 发表于 2012-08-21 20:26 回复此评论看一下三楼。。可能有些地方没说明白
引用来自“水月沧澜”的评论
猜大了就输了,猜小了可以继续?那这就不是二分算法了啊 - 5楼:sybn 发表于 2012-08-21 20:28 回复此评论从11开始,每次加10
也就是11,21,31,41...91,93,95,97,99,100
14次 - 6楼:sybn 发表于 2012-08-21 20:30 回复此评论11,21,31,41...91,94,97,99,100
11,21,31,41...91,94,97,99,98
11,21,31,41...91,94,97,95,96
这样是13次 - 7楼:sybn 发表于 2012-08-21 20:32 回复此评论还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法
- 8楼:yangst 发表于 2012-08-21 20:38 回复此评论我用的持续减小的步进 9 22 34 45 55 64 72 79 85 90 94 97 99 100 是14步
引用来自“sybn”的评论
还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法 - 9楼:清流 发表于 2012-08-23 21:07 回复此评论若在51错了,便要14次了额
引用来自“sybn”的评论
11,21,31,41...91,94,97,99,100
11,21,31,41...91,94,97,99,98
11,21,31,41...91,94,97,95,96
这样是13次 - 10楼:清流 发表于 2012-08-23 21:11 回复此评论楼主的思考的很到位,是从100开始倒着看的,那么按14次来,从14开始也行,于是第一个数可以猜9-14均可,只要后面把握好就行
引用来自“yangst”的评论
我用的持续减小的步进 9 22 34 45 55 64 72 79 85 90 94 97 99 100 是14步引用来自“sybn”的评论
还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法 - 11楼:sybn 发表于 2012-08-24 14:05 回复此评论那天下班回去的路上想了一下,在数学上这道题简化后就是:1+2+3+4...+n>100 求你的最小值.
于是n=14 - 12楼:yodfz 发表于 2012-08-28 09:08 回复此评论貌似二分?
- 13楼:MeMe 发表于 2012-08-28 16:16 回复此评论如果每个数最多要猜14次的话,步进递减,以下面的数列达到最小值
13,26,38,49,59,68,76,83,89,94,98
平均猜9.46次可以命中一个数
如果每个数不限长的猜的话,暂时不知道是否有最优解,求科普 - 14楼:winktj 发表于 2012-08-28 19:40 回复此评论哎兄弟我有点不太明白啊,如果是这样的话,假设在61提示猜错了。 那么已经猜了6次了,但是还是需要在51-61之间猜一个数,还需要9次,那就是15次了,求解。。。。
引用来自“sybn”的评论
11,21,31,41...91,94,97,99,100
11,21,31,41...91,94,97,99,98
11,21,31,41...91,94,97,95,96
这样是13次 - 15楼:yeliuping 发表于 2012-08-29 14:51 回复此评论x为100分为x段
y=100/x-(100%x==0 and 1 or 0)+x-1 求出x在(0<x<=100)间的y的最小值
然后以100/x开始100/x递增 如果提示“猜错了” 该数进行以1递减,如果在100/x-(100%x==0 and 1 or 0)次还未提示“猜测了”该数以1递增。计算结果x=10或11(最快第1次就猜对,最晚低19次猜对)
不知道是不是这么算的 请赐教 - 16楼:mavarick 发表于 2012-09-07 21:36 回复此评论一个递归问题:
问题可以简化为:
在(start,end)中间去数k,使得当k取大和取小最终走的步数一样。也就是个等概率问题。所以现在可以考虑:
如果k取大了,那么需要走k-start -1次
如果k取小了,那么需要继续在(k+1,end)之间取数。同样的过程
那么最小的取此集合是多少呢?
假设 96,97,98,99,100 五个数,怎么取呢
同样,取2最好,具体不解释。最多需要3次。取最大 3次
那么上一次取的集合是多少个数值呢?
应该是 本次的取的集合 + 最大的取次 + 1
即[92, 93, 94, 95] [,96, 97 ,98 ,99 , 100]
同理
可得:
集合个数 5 9 14 20 27 35 44 54 65 77 90 104
取次 3 4 5 6 7 8 9 10 11 12 13 14
可见,去14次就可以取100个数一样
所以最多14次
- 淘宝面试题猜数字游戏
- 淘宝面试题
- 淘宝面试题
- 淘宝面试题cacheline
- 淘宝面试题
- 淘宝的一道面试题
- 一道淘宝校园面试题
- 淘宝的一道面试题
- 淘宝研究院的面试题
- 淘宝面试题--大表建约束
- 面试题:最小数字
- 历届试题 数字游戏
- 历届试题 数字游戏
- 历届试题 数字游戏
- 历届试题 数字游戏
- 历届试题 数字游戏
- 历届试题 数字游戏
- 面试题 猜颜色球游戏
- python 面试题总结
- 华为python面试题
- facebook presto安装
- Python面试集锦
- 平衡点问题
- 淘宝面试题猜数字游戏
- 微软、google、雅虎、百度等各大著名公司的经典面试题的python实现!
- Python 面试题 - 堆排序 & 演算过程
- OPENCV中cvFindContours函数说明
- POJ2823(单调队列)
- [WinForm]最小化到系统托盘,右键退出
- 如何用Python来进行查询和替换一个文本字符串?
- BC30138: 无法在路径“C:\WINDOWS\TEMP\”中创建临时文件: 拒绝访问
- web前端工程师面试题