继续向上。看图猜数字1到30图片字

淘宝面试题猜数字游戏 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 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的其它代码处理一次猜测
& & &让我们继续!我们猜数字游戏需要做的第一步是允许玩家输入一个猜测的数字。将下面的代码输入到src/main.rs文件中:
fn main() {
println!(&Guess the number!&);
println!(&Please input your guess.&);
let mut guess = String::new();
io::stdin().read_line(&mut guess)
.expect(&Failed to read line&);
println!(&You guessed: {}&, guess);
& & &有许多代码!让我们一句一句解释。
& & &我们需要取得用户输入,并将结果作为输出。照此,我们需要来自标准库的IO库。Rust会为每个程序导入一些东西,隐式的(prelude)。如果不是隐式的,你需要直接使用。
fn main() {
& & &正如你前面看到的,main()函数是程序的进入点。fn语法定义了一个新函数,()暗示没有参数,{表示函数体的开始。因为我们没有包括返回值,将它假定为(),一个空的元组。
println!(&Guess the number!&);
println!(&Please input your guess.&);
& & &我们先前学习了println!()是一个宏,该宏在屏幕上打印一个字符串。
let mut guess = String::new();
& & &现在变的有趣了!在这一样中有许多东西。第一个需要注意的事情是,这是一个let声明,用来创建变量捆绑(variable bindings)。他们的格式如下:
let foo = bar;
& & &这将会创建一个名为foo的新捆绑,将其绑定到值bar上。在很多语言中,这叫做变量(variable),但是Rust的变量捆绑有一些玄机。
& & &例如,他们默认是不可变的。这就是为什么我们的例子使用mut:它是一个捆绑是可变的,而不是不可变的。在左边let并不会接受一个名字,实际上它接受一个‘模式(pattern)’。我们将会在后面使用模式。它使用简单:
let foo = 5; // immutable.
let mut bar = 5; // mutable
& & &现在我们知道let mut guess将会引入一个名为guess的可变绑定,但是我们需要看一下=的另一端,看看它绑定了什么:String::new()。
& & &String是一个字符串类型,由标准库提供。一个String是一个可增长的,UTF-8编码的文本。
& & &::new()语法使用::是因为这是一个特殊类型的关联函数(associated function)。也就是说,它关联到String自己,而不是String的一个特殊实例。有些函数称作为“静态方法”。
& & &这个函数名为new(),因为它创建了一个新的、空的String。你将会在许多类型上发现new()函数,因为它是一些类型创建新值的通用名字。
& & &让我们继续向前:
io::stdin().read_line(&mut guess)
.expect(&Failed to read line&);
& & &这写跟多!让我们一位一位的解读。第一行有两部分。这是第一部分:
io::stdin()
& & &还记得我们在程序的第一行怎么使用std::io吗?我们现在调用它的一个关联函数。如果我们没有使用use std::io,我们可以这么书写这一行:std::io::stdin()。
& & &这个特殊函数返回你终端输入的一个句柄。更多信息请参阅。
& & &下一部分竟会使用这个句柄获取用户输入:
read_line(&mut guess)
& & &这里,我们在我们的句柄上调用read_line()方法。方法类似于关联函数,但是仅仅能使用在一个类型的特殊实例上,而不是类型本身。我们也给read_line()传递了一个参数:&mut guess。
& & &还记得上面我们怎么捆绑guess的吗?我们说它是可变的。然而,read_line不会把一个String作为一个参数:它使用&mut String。Rust有一个特点叫做引用(reference),这允许你对一份数据有多分引用,这可以减少拷贝。引用是一个复杂的特点,作为Rust的一个主要卖点是怎样安全简单的使用引用。现在完成我们的程序我们并不需要知道过多的细节。现在,我们需要知道的是let捆绑、引用默认是不可变的。因此我们需要使用$mut guess,而不是&guess。
& & &为什么read_line()使用一个字符串的一个可变引用?它的工作是获取用户输入到标准输入数据,并把数据放在一个字符串中。所以它将这个字符串作为一个参数,为了加入输入,需要可变。
& & &但是我们还是不太明白这行代码。尽管这是一行文本,它仅仅是单行逻辑代码的第一部分:
& & && & & & &&
.expect(&Failed to read line&);& &&
& & &当你使用.foo()语法调用方法时,你可能会引入新的一行和空白字符。这能帮助你分开比较长的行。我们也可以使用:
io::stdin().read_line(&mut guess).ok().expect(&failed to read line&);
& & &这是这使代买难以阅读。所以我们将其分开,每个方法调用占用一行。我们已经讨论过read_line()了,但是还有ok()和expect()呢?我们已经说过read_line()将用户的输入传递给&mut String。但是它会返回一个值:在这种情况下是一个io::Result。Rust在它的标准库中有一些名为Result的类型:一个通用的Result,和一个特殊版本的子库,例如io::Result。
& & &这些Result类型的目的是编码错误处理信息。Result类型的值,跟任何类型一样,都有定义的方法。在这里,io::Result有一个ok()方法,意思为‘我们想假设这个值是一个正确的,如果不是,抛出错误信息即可’。为什么抛出?对于一个基础程序,我们仅仅想打印一个通用错误,通常意味着我们不能继续执行了。ok()方法返回一个值,有另外一个方法定义在该值上:expect()。expect()方法接受一个参数,如果不成功,将会停止(panic),并打印传递给它的信息。
& & &如果我们不是用这两个方法,我们的程序可以正常编译,但是会有警告信息:
$ cargo build
Compiling guessing_game v0.1.0 (file:///home/you/projects/guessing_game)
src/main.rs:10:5: 10:39 warning: unused result which must be used,
#[warn(unused_must_use)] on by default
src/main.rs:10
io::stdin().read_line(&mut guess);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
& & &Rust警告我们我们没有使用Result值。这个警告来自io::Result的一个特殊注解。Rust试图告诉你内没有处理一个潜在的错误。正确压制错的的方法是写一个错误处理程序。幸运的是,如果我们仅仅想在遇到问题是崩溃程序,我们可以使用这两个方法。如果我们能从错误中恢复,我们将做些额外的工作,但是我们将在未来的项目中保留这些。
& & &在这个例子中还有一行代码:
println!(&You guessed: {}&, guess);
& & &改代码输出我们保存输出的字符串。{}是占位符,所以我们将guess作为一个参数传递给它。如果我们有多个{},我们需要传递多个参数:
let x = 5;
let y = 10;
println!(&x and y: {} and {}&, x, y);
& & &很简单。
& & &我们可以使用cargo run运行我们的项目:
$ cargo run
Compiling guessing_game v0.1.0 (file:///home/you/projects/guessing_game)
Running `target/debug/guessing_game`
Guess the number!
Please input your guess.
You guessed: 6
& & &好的!我们的第一部分完成了:我们可以从键盘读取输入,并将其打印出来。
本文已收录于以下专栏:
相关文章推荐
     既然我们获得了用户的输入,让我们把猜测的数据跟神秘数字做比较。这是我们的下一步,尽管它还不能真正工作:
     loop关键字给我们一个无限循环。让我们添加它:
use std::...
他的最新文章
讲师: 许鹏
讲师:董付国
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&&&u的资源
JDK6 API 中文参考 查询
此 API 文档的组织方式
此 API(应用程序编程接口)文档包含对应于导航栏中的项目的页面,如下所述。
概述 页面是此 API 文档的首页,提供了所有软件包的列表及其摘要。此页面也可能包含这些软件包的总体描述。
每个软件包都有一个页面,其中包含它的
所需积分:
里面包含了华农java实验册的所有题目代码,均已提交验证成功!
所需积分:
实验内容:
一、定义一个名为Circle的圆类,位于shape包中。要求如下:
(1) 该类需要描述圆在二维坐标系中的位置,圆心的横、纵坐标值均取整数;描述圆的半径,取双精度类型。
(2) 无参构造方法将圆心坐标设为坐标圆点,半径设为1.0;有参构造方法需要根据参数值设置圆心坐标和半径值。
所需积分:
定义一个包含main方法的类TestCircle,位于shape包中
要求:编写静态方法reateArraycreateArray ,生成位置和大小均随机的 10 个圆对象,置于数组中。升序,输出。并求面积
所需积分:
每次游戏程序随机产生一个0-9之间的整数,要求玩家输入自己猜的数字,并对用户输入数字进行检查,进行如下提示:
如果用户猜对了,则提示:恭喜你,猜对了。结束本次游戏。
如果用户猜错了,则提示:你猜的数字太(大或小)了。要求用户继续猜。
如果连续3次没有猜对,则提示:游戏失败。
所需积分:
本书是计算机科学的经典基础教材。全书以自底向上方法帮助学生理解计算机系统的原理,前半部分阐述了计算机底层结构,后半部分讲解了高级语言编程及编程方法学,主要内容包括数据类型及其运算、数字逻辑、冯·诺伊曼模型、汇编语言、输入和输出、TRAP程序和子程序、C语言编程等内容。
【作  者】(美)Yale N
所需积分:当前位置: & &
& 百战天下幸运猜数字玩法
百战天下幸运猜数字玩法,百战天下幸运猜数字介绍。幸运猜数字,斗智斗运气。是否天资聪颖,是否反应迟钝,尽在猜数字玩法,不要拖队伍后腿。
开启时间:每日19:00-21:00
参与人数需10人,分为两组,每组5人,全服参与玩家随机匹配,组队人数达到参与条件游戏即可开始。每局游戏开始即随机生成一个0-999内的数字为标准答案,离标准答案更接近的一方获得胜利。
第一轮为交叉填数字,所有数字均为可见状态,确定双方数值上下限。
第二轮为盲填,填写期间所有数字均不可见,最终队伍数字平均数为队伍答案,两轮过后公布标准答案。
奖励:前2次可获得双倍奖励,3、4次可获得单倍奖励,奖励在每一局结束后通过邮件发送,挂机将不能获得奖励。
|广告服务|法律声明|鄂ICP备号-1
Copyright &
All rights reserved}

我要回帖

更多关于 猜数字java 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信