棋盘放谷粒

科学作家大卫·布拉特纳说,从前,有一个骗子为高端客户制作棋盘——在这个例子中,他是一个国王。

工匠很好;他的棋盘不仅仅是漂亮。他知道,国王喜欢下棋。于是他想出一个计谋,骗国王交出一大笔财产。怎样实现他的计划呢 ?他想,“这个国王的数学不是很好。

于是,当工匠把他的棋盘呈给国王时,他对国王说:

“殿下,我不要钱。或珠宝。我只要一点米饭。”

“嗯,”国王想,他自己就是个骗子。“我有米饭。大米多少钱?”

“我所要的,”工匠说,“就是你把一粒米放在第一格上,两粒放在第二格上,四粒放在第三格上,八粒放在第四格上,如此类推,直到整整六十四格。”

“我能做到。”国王不假思索地说。他命令他的粮仓付钱给这个人买棋盘。

好吧,这结果是相当困难的。棋盘上的前几格花了国王一粒,然后是两粒,然后是四粒……到第一行结束时,他收获了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(棋盘放谷粒)相关推荐

  1. LQ0262 棋盘放麦子【大数+亿进制】

    题目来源:蓝桥杯2012初赛 Java C组C题 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报 ...

  2. 蓝桥云算法题之棋盘放麦子——Python满分解答

    棋盘放麦子 题目描述 运行限制 解题思路 代码实现 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么 ...

  3. 蓝桥杯真题练习-棋盘放麦子

    蓝桥杯真题练习-棋盘放麦子 ## 填空题 2012 省赛 题目地址 题目概述 就是说有一个64个格子的棋盘,第一个格子放一粒麦子,第二个两粒,第三个四粒,第四个八粒,依次类推,最终需要多少麦子. 思路 ...

  4. 2020省赛->棋盘放麦子

    棋盘放麦子 (354) (1) 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 ...

  5. UVA - 11214Guarding the Chessboard守卫棋盘(迭代加深搜索)

    题意:输入一个n*m棋盘(0<n,m<10),某些格子有标记.用最少的皇后守卫所有带标记的格子.皇后规则是所在坐标的直线和斜线都可以被守卫,长度不限. 分析:因为不知道深度,所以用迭代加深 ...

  6. python棋盘放米循环结构_Python递归法计算棋盘上所有路径总奖品最大值(京东2016编程题)...

    问题描述:假设有一个6x6的棋盘,每个格子里有一个奖品(每个奖品的价值在100到1000之间),现在要求从左上角开始到右下角结束,每次只能往右或往下走一个格子,所经过的格子里的奖品归自己所有.问最多能 ...

  7. hdu 5100 n*n棋盘放k*1长方条最多覆盖面积

    http://acm.hdu.edu.cn/showproblem.php?pid=5100 给一个n*n的棋盘,问用k*1的长方条最多能覆盖多大的面积(k个单位都必须完全覆盖上去) 首先,若n< ...

  8. python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例

    本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题.分享给大家供大家参考,具体如下: 问题 将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方 ...

  9. 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 ...

最新文章

  1. Loadrunner日志设置与查看
  2. 从PHP安全讲DedeCms的安全加固
  3. 自定义元类控制类的实例化行为
  4. list中存储map的情况下,遍历list
  5. 军转干部计算机测试题,2015福建军转干考试计算机基础知识:计算机网络
  6. 蓝桥练习-算法训练 素因子去重
  7. 算法设计与分析——分支限界法——n皇后问题
  8. linux mailbox模型
  9. 图片维度不匹配_内容审核基础:审核方式、流程与审核维度
  10. redis中数据的持久化
  11. 视频编码格式全面解析
  12. python 股票估值_隐藏价值的角落:限售股AAP估值及PYTHON实现方法(上)
  13. 上云一时爽,遇坑泪两行
  14. Eclipse报错:An error has occurred.See error log for more details.
  15. VMware虚拟机鼠标闪烁
  16. NULL, '\0',0 '0'的区别
  17. 国家职业资格计算机调试维修技师试题,电工国家职业资格三级(高级)理论试题...
  18. for循环,for...in循环,forEach循环的区别
  19. js小游戏 (飞行的小鸟--canvas)
  20. JavaScript的语法解析与抽象语法树

热门文章

  1. 风靡全球的GANs:一文看尽这“混世魔王”的“三生三世”
  2. dubbo 路由配置_Dubbo-go v1.5.1发布,Dubbo 的 Go实现
  3. 程序员转行房屋设计师,本来不信,当看到楼梯后,我信了!
  4. 当学术论文开始标题党「x is All You Need」
  5. 更灵活、有个性的卷积——可变形卷积(Deformable Conv)
  6. 百度地图显示服务器地址,百度地图_根据地图上标记位置获取街道信息,以及经纬度信息...
  7. 用html5点击消失,input点击后placeholder中的提示消息消失
  8. C语言 int y=10 do,删除学生信息算法执行完case10输入y 之后do whil
  9. ES6-set集合应用
  10. xftp5安装注册教程