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 个,输出这个区间和. 输入描述: 第一行一个 ...
随机推荐
- mybatis 一对一关联 association 返回空值
mybatis 一对一关联 association 返回空值 最近学习spring mvc + mybatis开发,看的书是<Spring MVC+Mybatis开发 从入门到精通>,在学 ...
- nmap工具简介
nmap参数介绍: -sL:简单列表扫描 -sn:扫描主机,但是不进行端口扫描 -sS:TCP SYN扫描[半开放扫描,扫描速度高且隐蔽性好] -p |-F:扫描端口列表与扫描次序,常用的扫描方式[- ...
- 推荐一个好用的E2E前端测试框架cypress
Cypress 是一个E2E的前端自动化测试框架,同样是基于BDD的思想设计的,话不多说,上demo https://github.com/Spillage/cypress-demo PS, 还有一个 ...
- 关于Url路径中出现特殊字符,文件无法下载的问题
1.原网址 传送门:http://blog.csdn.net/jackljf/article/details/43796137 在站点根目录新建或编辑web.config 文件,找到<syst ...
- 8ci
- 1.2 JAVA多线程实现
线程和进程 进程:是执行中一段程序, 进程是系统进行资源分配和调度的一个独立单位. 线程:比进程更小的能独立运行的基本单位,单个进程中执行中每个任务就是一个线程.线程是进程中执行运算的最小单位. Th ...
- c#基础之异常处理及自定义异常
一.什么是c#中的异常? 异常是程序运行中发生的错误,异常处理是程序的一部分.c#中的异常类主要是直接或者间接的派生于 System.Exception类 ,也就是说System.Exception类 ...
- 'weinre' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方案
使用 npm install -g weinre 全局安装 weinre,weinre 安装目录是:C:\Users\Administrator\AppData\Roaming\npm 需要配置环境变 ...
- 微信公众号开发前端获取openId
参考 https://blog.csdn.net/qq_35430000/article/details/79299529
- Unity 关于AssetBundle读取场景
一. 1.关于如何打包成ab包,就不多说了,网上很多教程,siki学院也有siki老师的免费视频教程挺详细的,可以看看 http://www.sikiedu.com/my/course/74 2.为了 ...