360技术笔试编程题 - 无意间看到这么个东西,闲来无事用JS写了一下
题目描述
为考验各自的数学能力,小B和小A经常在一起玩各种数值游戏,这一次他们又有了一种新玩法。每人从指定的数值范围中各自选择一个整数,记小A选择的数值为a,小B选择的数值为b。他们用一个均匀分布的随机数发生器在该数值范围中随机生成一个整数c,定义制胜的游戏规则为谁选的数离c近则谁取得胜利。由于小B是女生,特别定义当两人的数与c之间的差值相等时,小B获胜。
由于先前的游戏中,小A为表现绅士风度总是输多赢少,因此他特别渴望这次能够给小B比较深刻的映像,所以向你求助。你事先已经知道了小B所选的数值和指定的数值范围,小A希望你帮他选择一个数值使得他获胜的概率最大。
输入多行,每行一组数据,包含两个正整数n和b,分别代表数值范围和小B所需的数字,其中 1 <= b <= n <= 10^9.
每组输入,单独的行中输出一个数,为小A所选的数字,使得小A获胜的概率最大,若存在多个这样的数,输出最小的那个。
直接上js代码,可以直接复制到控制台运行,思路解释都在注释里面了:
/**
* 选数字游戏执行函数
* @param {Number} n 玩游戏的次数
*/
function playGame(n) {
let x = n;
if (typeof n !== 'number' || parseInt(n) !== n) {
console.warn("请输入整数局的对局次数");
return false;
} let aWin = 0;
while (x > 0) {
let winner = aMustWin();
if (winner === 'a') {
aWin++
}
x--
} console.log(`
共进行游戏${n}场
小A获胜${aWin}场
小A的胜率为${aWin / n *100}%
`)
} function aMustWin() {
//生成n
let n = Math.floor(Math.random() * Math.pow(10, 9));
while (n === 0) {
n = Math.floor(Math.random() * Math.pow(10, 9));
} //按规则随机生成c - c不可能为0
let c = Math.floor(Math.random() * n);
while (c === 0) {
c = Math.floor(Math.random() * n);
} //小B的选择 - b不可能等于0
let b = Math.floor(Math.random() * n);
while (b === 0) {
b = Math.floor(Math.random() * n);
} //小A的选择 - 选择靠近小B的选择,并在靠近中值的一侧
let a = 0,
mid = parseInt((n + 1) / 2);
if (mid > b) {
a = b + 1
} else {
a = b - 1
} //比较谁离C近
if (Math.abs(c - b) <= Math.abs(c - a)) {
console.log(`
数值范围为1 - ${n}
随机值c为 - ${c}
小A的选择为 - ${a}
小B的选择为 - ${b}
小B获胜
`)
return 'b'
} else {
console.log(`
数值范围为1 - ${n}
随机值c为 - ${c}
小A的选择为 - ${a}
小B的选择为 - ${b}
小A获胜
`)
return 'a'
}
}
playGame(1000) //玩一千把
360技术笔试编程题 - 无意间看到这么个东西,闲来无事用JS写了一下的更多相关文章
- 2017 CVTE春招内推专场 C/C++软件开发岗笔试编程题
先来一波吐槽:选择题全是不定项选择,考的内容在我看来,"反正我接受唔到咯". 比如: 1.Windows操作系统某个通信机制(具体题目忘了,反正答案我选了个熟悉的名词"消 ...
- CVTE前端笔试编程题
这些题目是做完笔试之后,在别的地方找到的,现在附上. 1.(1)这题考察的怎么把参数转换为数组,然后再截取你想要的位数. function C(){ var a_args=Array.prototyp ...
- 一道生成不重复随机数字的C#笔试编程题
当时写在纸上的程序没有验证输入,出面试公司没多久就突然想起来这点了,囧啊! 不过当时笔试的时候想到写异常处理了. 回来上机整理了一下程序,才发现原来还会用到递归的. 当时面试官边说边出的题,问他数字是 ...
- 网易2019校招C++研发工程师笔试编程题
丰收? (忘了题目了QAQ) 题目描述: 又到了丰收的季节,恰逢小易去牛牛的果园里游玩. 牛午常说他对整个果园的每个地方都了如指掌,小易不太相信, 所以他想考考牛牛. 在果园里有N堆苹果,每堆苹果的数 ...
- 腾讯笔试编程题,贪吃的小Q(二分查找)
问题描述 小Q的父母要出差N天,走之前给小Q留下了M块巧克力.小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力. 输入描 ...
- HW2017笔试编程题
一.写一个转换字符串的函数 1.题目描述 将输入字符串中下标为偶数的字符连成一个新的字符串输出,需要注意两点: (1)如果输入字符串的长度超过20,则转换失败,返回“ERROR!”字符串: (2)输入 ...
- HW2018校招研发笔试编程题
1. 数字处理 题目描述:给出一个不多于5位的整数,进行反序处理,要求 (1)求出它是几位数 (2)分别输出每一个数字(空格隔开) (3)按逆序输出各位数字(仅数字间以空格间隔,负号与数字之间不需要间 ...
- 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第一道——最佳路径
题目 给定一个 n*m 的矩阵 A ,矩阵中每一个元素为一个十六进制数.寻找一条从左上角都右下角的路径,每次只能向右或者向下移动, 使得路径上所有数字之积在 16 进制下的后缀 0 最少. 输入描述: ...
- 今日头条 2018 AI Camp 6 月 2 日在线笔试编程题第一道——最大连续区间和扩展
题目 给出一个长度为 n 的数组a1.a2.....ana1.a2.....an,请找出在所有连续区间 中,区间和最大同时这个区间 0 的个数小于等于 3 个,输出这个区间和. 输入描述: 第一行一个 ...
随机推荐
- Java JDK 获取MongoDB中的所有账户
记录我在Stack Overflow中的回答: https://stackoverflow.com/questions/31518107/mongodb-java-list-all-database- ...
- 理解不为人知的ClassLoader
JAVA类装载方式,有两种: 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中. 2.显式装载, 通过class.forname()等方法,显 ...
- Java集合框架相关知识整理
1.常见的集合有哪些? Collection接口和Map接口是所有集合框架的父接口 Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap ...
- hbase-0.92.1集群部署
环境 主机名 IP地址 角色 安装目录 sht-sgmhadoopnn-01 172.16.101.55 NameNode.SecondaryNameNode. JobTracker.HMaster ...
- python--网络编程urllib
一.python操作网络也就是打开一个网站,或者请求一个http接口,使用urllib模块.urllib模块是一个标准模块,直接import urllib即可 from urllib import r ...
- day 11 装饰器
1.day 10 内容复习 # 之前做得的题 以后再遇到能保证会 # 下周二考 :所有的知识 # 面试题:认真对待 # # 三元运算符 # 接收结果的变量 = 条件为真的结果 if 条件 else 条 ...
- 将一幅图像取平均值缩小N倍实现方法
/// <summary> /// 将图像缩小N倍 /// </summary> /// <param name="source">原图数据&l ...
- Delphi 带星期几的日期格式化
把日期按日期+星期几的格式输出 方法1:DatetoStr + DayOfWeek计算 ,这种办法灵活,但计算量大,不再祥叙. 方法2:FormatDateTime 具体代码如下://这里需要用For ...
- HTML的块级元素和行内元素
行内元素一般是内容的容器,而块级元素一般是其他容器的容器.一般情况下,行内元素只能包含内容或者其它行内元素,宽度和长度依据内容而定,不可以设置,可以和其它元素和平共处于一行:而块级元素可以包含行内元素 ...
- day48-python爬虫学习三
Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能.他们两个最显着的差异如下: urllib2可以接受一个Request对象,并以此可以来设置一个URL的h ...