一九终有回41.38.(三魂七魄一精神猜数字字)

淘宝面试题猜数字游戏 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 14时,
CNT 看到一个帖子分享的淘宝的一道笔试题,猜数字的问题,1-100随机取一个数, 如果猜的数小了,系统提示你猜小了,如果猜大了,系统只会提示你猜错了,并且以后也不会提示你猜小了或猜大了,问能不能以最少的次数猜对,并且次数是多少,还有第一次应该猜几。刚开始学python,就简单把游戏过程写了一下。。。。纯菜鸟。。。。。。。。就当练手了
传完才发现我已经把次数限制在14了。。。不知道有没其他答案。
代码片段(1)
guess.py&~&485B&&&&
#!/usr/bin/env python
#guess a number between 1-100
#if it is smaller ,tell you smaller
#if it is bigger,just tell you are wrong
from random import randint
num = randint(1,100)
flag = True
count = 14
while count&0:
number = int(raw_input('input the number:'))
if number == num:
print 'good!!'
if number&num and flag:
print 'smaller,please pick a bigger one'
print 'wrong'
flag = False
print 'you lose'
开源中国-程序员在线工具:
我也是刚学了2天python,不过我觉得这个题目和语言貌似无关。考察的是二分算法吧,第一个数字肯定输入50了,我就顺着楼主的代码copy一份,很多基础我还不明白。
#!/usr/bin/env python
#guess a number between 1-100
#if it is smaller ,tell you smaller
#if it is bigger,just tell you are wrong
from random import randint
num = randint(1,100)
while 2&1:
count += 1
number = int(raw_input('input the number:'))
if number == num:
print 'good!'
print '\n'
print count
print 'times'
if number&num and flag:
print 'smaller'
print 'bigger'
feiyan :$ python guess.py
input the number:50
input the number:25
input the number:37
2楼:LeeNux 发表于
猜大了就输了,猜小了可以继续?那这就不是二分算法了啊
3楼:yangst 发表于
引用来自“飞晏”的评论我也是刚学了2天python,不过我觉得这个题目和语言貌似无关。考察的是二分算法吧,第一个数字肯定输入50了,我就顺着楼主的代码copy一份,很多基础我还不明白。
#!/usr/bin/env python
#guess a number between 1-100
#if it is smaller ,tell you smaller
#if it is bigger,just tell you are wrong
from random import randint
num = randint(1,100)
while 2&1:
count += 1
number = int(raw_input('input the number:'))
if number == num:
print 'good!'
print '\n'
print count
print 'times'
if number&num and flag:
print 'smaller'
print 'bigger'
feiyan :$ python guess.py
input the number:50
input the number:25
input the number:37
不是这样的,如果有一次猜大了,程序就不会提示你是猜大了还是猜小了,只告诉你是猜对了还是猜错了,并且这次以后不论猜大了猜小了都只提示猜错了。。。
4楼:yangst 发表于
引用来自“水月沧澜”的评论猜大了就输了,猜小了可以继续?那这就不是二分算法了啊看一下三楼。。可能有些地方没说明白
5楼:sybn 发表于
从11开始,每次加10
也就是11,21,31,41...91,93,95,97,99,100
6楼: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次
7楼:sybn 发表于
还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法
8楼:yangst 发表于
引用来自“sybn”的评论还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法
我用的持续减小的步进 9 22 34 45 55 64 72 79 85 90 94 97 99 100 是14步
9楼:清流 发表于
引用来自“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次若在51错了,便要14次了额
10楼:清流 发表于
引用来自“yangst”的评论引用来自“sybn”的评论还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法
我用的持续减小的步进 9 22 34 45 55 64 72 79 85 90 94 97 99 100 是14步楼主的思考的很到位,是从100开始倒着看的,那么按14次来,从14开始也行,于是第一个数可以猜9-14均可,只要后面把握好就行
11楼:sybn 发表于
那天下班回去的路上想了一下,在数学上这道题简化后就是:1+2+3+4...+n&100 求你的最小值.
12楼:yodfz 发表于
13楼:MeMe 发表于
如果每个数最多要猜14次的话,步进递减,以下面的数列达到最小值
13,26,38,49,59,68,76,83,89,94,98
平均猜9.46次可以命中一个数
如果每个数不限长的猜的话,暂时不知道是否有最优解,求科普
14楼:winktj 发表于
引用来自“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次哎兄弟我有点不太明白啊,如果是这样的话,假设在61提示猜错了。 那么已经猜了6次了,但是还是需要在51-61之间猜一个数,还需要9次,那就是15次了,求解。。。。
15楼:yeliuping 发表于
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 发表于
一个递归问题:
问题可以简化为:
在(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次
17楼:zhjiachao126 发表于
引用来自“yodfz”的评论貌似二分?明显不是二分 “如果猜的数小了,系统提示你猜小了,如果猜大了,系统只会提示你猜错了,并且以后也不会提示你猜小了或猜大了”
18楼:riverGis 发表于
14,27,39,50,60,69,77,84,90,95,99。99如果系统提示错的话说明位于95-99之间,最多再猜3次,如果提示猜小的话,再猜一次即可。按此顺序猜,最多14次肯定可以猜出
开源从代码分享开始
yangst的其它代码当前位置:&>>& &>>&
发布于 日 14时,
CNT 看到一个帖子分享的淘宝的一道笔试题,猜数字的问题,1-100随机取一个数, 如果猜的数小了,系统提示你猜小了,如果猜大了,系统只会提示你猜错了,并且以后也不会提示你猜小了或猜大了,问能不能以最少的次数猜对,并且次数是多少,还有第一次应该猜几。刚开始学python,就简单把游戏过程写了一下。。。。纯菜鸟。。。。。。。。就当练手了
传完才发现我已经把次数限制在14了。。。不知道有没其他答案。
代码片段(1)
1.&[文件] guess.py&~&485B&&&& (19)&&&&
from random
import randint
randint(1,100)
while count&0:
&&&&count-=1;
&&&&number
= int(raw_input('input the number:'))
&&&&&&&&print
&&&&&&&&break
&&&&&&&&if
number&num and
&&&&&&&&&&&&print
'smaller,please pick a bigger one'
&&&&&&&&else:
&&&&&&&&&&&&print
&&&&&&&&&&&&if
&&&&&&&&&&&&&&&&flag
'you lose'
开源中国-程序员在线工具:
1楼:飞晏 发表于
回复此评论
我也是刚学了2天python,不过我觉得这个题目和语言貌似无关。考察的是二分算法吧,第一个数字肯定输入50了,我就顺着楼主的代码copy一份,很多基础我还不明白。
from random
import randint
randint(1,100)
while 2&1:
&&&&number
= int(raw_input('input the number:'))
&&&&&&&&print
&&&&&&&&print
&&&&&&&&print
&&&&&&&&print
&&&&&&&&break
&&&&&&&&if
number&num and
&&&&&&&&&&&&print
&&&&&&&&else:
&&&&&&&&&&&&print
feiyan&a href=&http://my.oschina.net/u/575662&
target=&_blank&
rel=&nofollow&&@FPC&/a& :$ python guess.py
input the number:50
input the number:25
input the number:37
2楼:李师叔 发表于
回复此评论
猜大了就输了,猜小了可以继续?那这就不是二分算法了啊
3楼:yangst 发表于
回复此评论
引用来自“飞晏”的评论
我也是刚学了2天python,不过我觉得这个题目和语言貌似无关。考察的是二分算法吧,第一个数字肯定输入50了,我就顺着楼主的代码copy一份,很多基础我还不明白。
from random
import randint
randint(1,100)
while 2&1:
&&&&number
= int(raw_input('input the number:'))
&&&&&&&&print
&&&&&&&&print
&&&&&&&&print
&&&&&&&&print
&&&&&&&&break
&&&&&&&&if
number&num and
&&&&&&&&&&&&print
&&&&&&&&else:
&&&&&&&&&&&&print
feiyan&a href=&http://my.oschina.net/u/575662&
target=&_blank&
rel=&nofollow&&@FPC&/a& :$ python guess.py
input the number:50
input the number:25
input the number:37
不是这样的,如果有一次猜大了,程序就不会提示你是猜大了还是猜小了,只告诉你是猜对了还是猜错了,并且这次以后不论猜大了猜小了都只提示猜错了。。。
4楼:yangst 发表于
回复此评论
引用来自“水月沧澜”的评论
猜大了就输了,猜小了可以继续?那这就不是二分算法了啊
看一下三楼。。可能有些地方没说明白
5楼:sybn 发表于
回复此评论
从11开始,每次加10
也就是11,21,31,41...91,93,95,97,99,100
6楼: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次
7楼:sybn 发表于
回复此评论
还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法
8楼:yangst 发表于
回复此评论
引用来自“sybn”的评论
还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法
我用的持续减小的步进 9 22 34 45 55 64 72 79 85 90 94 97 99 100 是14步
9楼:清流 发表于
回复此评论
引用来自“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次
若在51错了,便要14次了额
10楼:清流 发表于
回复此评论
引用来自“yangst”的评论
引用来自“sybn”的评论
还可以继续优化,谁顶上继续,步进应该持续减小.我都用的10,是偷懒的办法
我用的持续减小的步进 9 22 34 45 55 64 72 79 85 90 94 97 99 100 是14步
楼主的思考的很到位,是从100开始倒着看的,那么按14次来,从14开始也行,于是第一个数可以猜9-14均可,只要后面把握好就行
11楼:sybn 发表于
回复此评论
那天下班回去的路上想了一下,在数学上这道题简化后就是:1+2+3+4...+n&100 求你的最小值.
12楼:yodfz 发表于
回复此评论
貌似二分?
13楼:MeMe 发表于
回复此评论
如果每个数最多要猜14次的话,步进递减,以下面的数列达到最小值
13,26,38,49,59,68,76,83,89,94,98
平均猜9.46次可以命中一个数
如果每个数不限长的猜的话,暂时不知道是否有最优解,求科普
14楼:winktj 发表于
回复此评论
引用来自“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次
哎兄弟我有点不太明白啊,如果是这样的话,假设在61提示猜错了。 那么已经猜了6次了,但是还是需要在51-61之间猜一个数,还需要9次,那就是15次了,求解。。。。
15楼:yeliuping 发表于
回复此评论
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 发表于
回复此评论
一个递归问题:
问题可以简化为:
在(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次
本文已收录于以下专栏:
相关文章推荐
年腾讯,创新工场,淘宝,百度,阿里,迅雷。网易游戏校园招聘面试题集锦(1-25题含答案)
又是一年招聘季,小鸟我也在本季参加招聘,所以特在网上和群里面这里去年和今年的面试题,以备战...
1、操作系统中的同步和异步有什么区别?分别应用在什么场合?答:同步,就是说你的程序在执行某一个操作时一直等待直到操作完成。    最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口...
人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..
九月腾讯,创新工场,淘宝等公司最新面试三十题
引言   
    曾记否,去年的10月份也同此刻一样,是找工作的高峰期,本博客便是最初由整理微软等公司面试题而发展而来的。如今,又即将迈入求...
网上流传着一题淘宝面试题,原题如下:
我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在有5只小白鼠,请问一下,...
给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],...
点击打开链接
一:分析题目
从题中可以看到“很大的List”以及“充分利用多核CPU”,这就已经充分告诉我们要采用多线程(任务)进行编写。具体怎么做呢?大概的思路就是分割List,每一小块的Li...
1、说说项目
由于我几年一直做一个产品,从后台做到前台,从业务开发做到技术平台,所以就画了整个产品部署架构图,b/s & c/s的,然后一层层的讲解。
B/S现有Web框架改造、浏览器缓存、c...
前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果。
今天在看淘宝之前的一道面试题目,内容是
在高性能服务器的代码中经常会看到类似这样的代码:
typedef union
erts_smp_rwmtx_
byte cache_...
一:分析题目从题中可以看到“很大的List”以及“充分利用多核CPU”,这就已经充分告诉我们要采用多线程(任务)进行编写。具体怎么做呢?大概的思路就是分割List,每一小块的List采用一个线程(任务...
他的最新文章
讲师:董西成
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 猜数字 的文章

 

随机推荐