Codewars-The wheat/rice and chessboard problem(棋盘放谷粒)
棋盘放谷粒
科学作家大卫·布拉特纳说,从前,有一个骗子为高端客户制作棋盘——在这个例子中,他是一个国王。
工匠很好;他的棋盘不仅仅是漂亮。他知道,国王喜欢下棋。于是他想出一个计谋,骗国王交出一大笔财产。怎样实现他的计划呢 ?他想,“这个国王的数学不是很好。”
于是,当工匠把他的棋盘呈给国王时,他对国王说:
“殿下,我不要钱。或珠宝。我只要一点米饭。”
“嗯,”国王想,他自己就是个骗子。“我有米饭。大米多少钱?”
“我所要的,”工匠说,“就是你把一粒米放在第一格上,两粒放在第二格上,四粒放在第三格上,八粒放在第四格上,如此类推,直到整整六十四格。”
“我能做到。”国王不假思索地说。他命令他的粮仓付钱给这个人买棋盘。
好吧,这结果是相当困难的。棋盘上的前几格花了国王一粒,然后是两粒,然后是四粒……到第一行结束时,他收获了128粒。
在第二排,事情失控了。到第21格时,他欠了一百多万粒粮食;到第四十一年时,已经有超过一万亿粒米——比他、他的臣民或任何地方的国王所能负担的都要多。
毕竟,他是一个国王。他对谈判略知一二。
“我给你钱,”他对工匠说。“但是在你收到钱之前,为了确保你得到了你想要的,我想让你数一数我给你的每一粒粮食。”
“噢,不必了,”工匠说。
“噢,这是必须的。”国王说。“我不想骗你。”
数一粒米需要一秒钟。要数一数答应给他的粮食的数量,这位工匠得花上万亿年,大约是我们宇宙年龄的42倍,才能完成他的计算。伯爵还没有算完,国王是不会付钱的。工匠很快意识到这个数永远也做不完。他的骗局被戳穿了。
这里的道德吗?国王可能有时会忘记数学,但他们很少总是忘记数学。这就是为什么他们是国王。
来源:That Old Rice-Grains-On-The-Chessboard Con
题目描述
简单思路:根据输入的数字判断在2的几次方之间,并返回最终的棋盘位置。
个人想法:使用for循环+if条件判断,当然这是最笨的方法,也是复杂度最高的,属于暴力破解。
源码
function squaresNeeded(grains) {//your code hereif (grains == 0) {return 0;} else {for (var i = 0; i < grains; i++) {// 刚好等于2的几次方,直接跳出if ((grains == Math.pow(2, i))) {return i + 1;// break;} else if (grains > Math.pow(2, i) && grains < Math.pow(2, (i + 1))) {return i + 1;}}}
}
测试结果
别的大佬的写法(调用Math方法):
function squaresNeeded(grains){return Math.ceil(Math.log2(grains+1))
}
二叉树:
function squaresNeeded(grains){return grains > 0 ? grains.toString(2).split("").length : 0
}
策略:我们可以转换成一个二进制字符串,然后通过分割成一个数组,因为二进制是以2为基数的数字系统,我们用2的幂来计数
棋盘格。它不满足的一种情况是0粒;用三进制来解释。
计算某位置的谷粒数
function qipan(num) {var sum = 0;var grains = 0;for(var i=0;i<num;i++){grains = Math.pow(2,i);sum += grains;}console.log('The ' + num + 'th chessboard index has ' + grains + ' and,it totally has '+sum+' grains');
}
测试:
qipan(4);
qipan(12);
qipan(64);
64格式的棋盘:
Codewars-The wheat/rice and chessboard problem(棋盘放谷粒)相关推荐
- LQ0262 棋盘放麦子【大数+亿进制】
题目来源:蓝桥杯2012初赛 Java C组C题 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报 ...
- 蓝桥云算法题之棋盘放麦子——Python满分解答
棋盘放麦子 题目描述 运行限制 解题思路 代码实现 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么 ...
- 蓝桥杯真题练习-棋盘放麦子
蓝桥杯真题练习-棋盘放麦子 ## 填空题 2012 省赛 题目地址 题目概述 就是说有一个64个格子的棋盘,第一个格子放一粒麦子,第二个两粒,第三个四粒,第四个八粒,依次类推,最终需要多少麦子. 思路 ...
- 2020省赛->棋盘放麦子
棋盘放麦子 (354) (1) 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 ...
- UVA - 11214Guarding the Chessboard守卫棋盘(迭代加深搜索)
题意:输入一个n*m棋盘(0<n,m<10),某些格子有标记.用最少的皇后守卫所有带标记的格子.皇后规则是所在坐标的直线和斜线都可以被守卫,长度不限. 分析:因为不知道深度,所以用迭代加深 ...
- python棋盘放米循环结构_Python递归法计算棋盘上所有路径总奖品最大值(京东2016编程题)...
问题描述:假设有一个6x6的棋盘,每个格子里有一个奖品(每个奖品的价值在100到1000之间),现在要求从左上角开始到右下角结束,每次只能往右或往下走一个格子,所经过的格子里的奖品归自己所有.问最多能 ...
- hdu 5100 n*n棋盘放k*1长方条最多覆盖面积
http://acm.hdu.edu.cn/showproblem.php?pid=5100 给一个n*n的棋盘,问用k*1的长方条最多能覆盖多大的面积(k个单位都必须完全覆盖上去) 首先,若n< ...
- python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例
本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题.分享给大家供大家参考,具体如下: 问题 将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方 ...
- python123平台作业答案循环结构棋盘放米_python练习集100题(1-20)
题目1:有1.2.3.4四个数,能组成多少个互不相同且无重复的三位数?都是多少?list_num=[1,2,3,4] all_num=[] for i in list_num: for j in li ...
最新文章
- Loadrunner日志设置与查看
- 从PHP安全讲DedeCms的安全加固
- 自定义元类控制类的实例化行为
- list中存储map的情况下,遍历list
- 军转干部计算机测试题,2015福建军转干考试计算机基础知识:计算机网络
- 蓝桥练习-算法训练 素因子去重
- 算法设计与分析——分支限界法——n皇后问题
- linux mailbox模型
- 图片维度不匹配_内容审核基础:审核方式、流程与审核维度
- redis中数据的持久化
- 视频编码格式全面解析
- python 股票估值_隐藏价值的角落:限售股AAP估值及PYTHON实现方法(上)
- 上云一时爽,遇坑泪两行
- Eclipse报错:An error has occurred.See error log for more details.
- VMware虚拟机鼠标闪烁
- NULL, '\0',0 '0'的区别
- 国家职业资格计算机调试维修技师试题,电工国家职业资格三级(高级)理论试题...
- for循环,for...in循环,forEach循环的区别
- js小游戏 (飞行的小鸟--canvas)
- JavaScript的语法解析与抽象语法树
热门文章
- 风靡全球的GANs:一文看尽这“混世魔王”的“三生三世”
- dubbo 路由配置_Dubbo-go v1.5.1发布,Dubbo 的 Go实现
- 程序员转行房屋设计师,本来不信,当看到楼梯后,我信了!
- 当学术论文开始标题党「x is All You Need」
- 更灵活、有个性的卷积——可变形卷积(Deformable Conv)
- 百度地图显示服务器地址,百度地图_根据地图上标记位置获取街道信息,以及经纬度信息...
- 用html5点击消失,input点击后placeholder中的提示消息消失
- C语言 int y=10 do,删除学生信息算法执行完case10输入y 之后do whil
- ES6-set集合应用
- xftp5安装注册教程