博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Js实现给一个1-100的数字,让计算机用最少的次数猜中这个数字
阅读量:6278 次
发布时间:2019-06-22

本文共 1291 字,大约阅读时间需要 4 分钟。

解题思路就是选择两个数字,一个最小值和一个最大值,取这两者的平均值作为判断。

如果数字大了,就增大最小值。
如果数字小了,就减小最大值。
用递归让最小值和最大值之间的范围逐渐缩小。
当平均值等于目标值的时候,打印这个值,并退出递归。

这里会遇到一个问题,比如用户输入了一个数字1,当number足够小时,取值范围最后会变为 1-4 和 1-3,这两者的平局值向下取整之后,都为2,所以会造成计算机重复猜同一个数字。

所以我加入了一个数组,将猜过的数字放入数组中,如果当前猜的数字已存在数组中,再用标记判断,看上一次是猜大了还是猜小了,如果猜小了就加一,猜大了就减一。

// 初始值var number = 100// 猜数次数var time = 0// 每次猜的数字var temp = null// 标记上一次是猜大了还是猜小了var stamp = null// 存放猜过的数字var array = []function guess (target, min = 1, max = 100) {  // 判断给的数字是否在范围内  if (target > 100 || target < 1) {    console.log('要1到100的数字哦!')    return  }  temp = Math.floor((max + min) / 2)  temp = tempChange(temp)  // 将猜过的数字放进一个数组里  array.push(temp)  number = Math.floor(number / 2)  if (number === 0) number = 1  if (target === temp) {    console.log('第' + ++time + '次,我猜是' + temp + ' 耶!我猜对了!')    return  } else if (target >= min + number) {    console.log('第' + ++time + '次,我猜是' + temp + ' 小了!')    // 猜小了,标记为true    stamp = true    guess(target, min + number, max)  } else if (target <= max - number) {    console.log('第' + ++time + '次,我猜是' + temp + ' 大了!')    // 猜大了,标记为false    stamp = false    guess(target, min, max - number)  }}// 判断这个数字是否已经猜过function tempChange (temp) {  if (array.indexOf(temp) !== -1) {    if (stamp) {      temp++    } else {      temp--    }  }  return temp}guess(9)

图片描述

转载地址:http://difva.baihongyu.com/

你可能感兴趣的文章
《计算广告:互联网商业变现的市场与技术》一第一部分 在线广告市场与背景...
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
《Arduino家居安全系统构建实战》——1.5 介绍用于机器学习的F
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>