9.32 丢棋子问题

题目】:

  一座大楼有0~N层,地面算作第0层,最高的一层为第N层,已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会摔碎(1<=i<=N),给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔的最少次数。一次只能扔一个棋子

  举例:

    N=10,K=1

    返回10,因为只有1棵棋子,所以不得不从第1层开始一直试到第10层,在最差的情况下,即第10层是不会摔坏的最高层,最少也要扔10次

    N=3,K=2

    返回2,先在2层扔1棵棋子,如果碎了,试第1层,如果没碎,试第3层

    N=105,K=2

    返回14,

    第一个棋子先在14层扔,碎了则用仅存的一个棋子试1~13层

    若没碎,第一个棋子继续在27层扔,碎了则用仅存的一个棋子试15~26层

    若没碎,第一个棋子继续在39层扔,碎了则用仅存的一个棋子试28~38层

    若没碎,第一个棋子继续在50层扔,碎了则用仅存的一个棋子试40~49层

    若没碎,第一个棋子继续在60层扔,碎了则用仅存的一个棋子试51~59层

    若没碎,第一个棋子继续在69层扔,碎了则用仅存的一个棋子试61~68层

    若没碎,第一个棋子继续在77层扔,碎了则用仅存的一个棋子试70~76层

    若没碎,第一个棋子继续在84层扔,碎了则用仅存的一个棋子试78~83层

    若没碎,第一个棋子继续在90层扔,碎了则用仅存的一个棋子试85~89层

    若没碎,第一个棋子继续在95层扔,碎了则用仅存的一个棋子试91~94层

    若没碎,第一个棋子继续在99层扔,碎了则用仅存的一个棋子试96~98层

    若没碎,第一个棋子继续在102层扔,碎了则用仅存的一个棋子试100、101层

    若没碎,第一个棋子继续在104层扔,碎了则用仅存的一个棋子试103层

    若没碎,第一个棋子继续在105层扔,若到这一步还没碎,那么105便是结果

题目来源:左程云老师《程序员代码面试指南》

原文地址:https://www.cnblogs.com/latup/p/10205303.html

时间: 2024-08-29 16:24:56

9.32 丢棋子问题的相关文章

丢棋子问题 ——(动态规划)

题目描述 ? 一座大楼一共有0~N层,地面算第0层,最高一层为第N层.已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能回摔碎,也可能不会摔碎(1<=i<=N).给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下仍的最少次数.一次只能仍一个棋子. 例子 N=10, K=1. 返回10.因为只有1颗棋子,所以不得不从第一层开始一直试到第十层,最差情况要扔10次. N=3, K=2. 返回2.现在第2层仍1颗棋子,如果碎了,试第1层:如果没碎,试

Qt版本中国象棋开发(三)

实现功能:棋子初始化及走棋规则 棋子类: 1 #ifndef STONE_H 2 #define STONE_H 3 4 #include <QString> 5 6 class Stone 7 { 8 public: 9 Stone(); 10 ~Stone(); 11 12 enum TYPE{JIANG, CHE, PAO, MA, BING, SHI, XIANG}; 13 14 int _row; //棋子所在行 15 int _col; //棋子所在列 16 TYPE _type;

Cocos2d-X开发中国象棋《七》新局功能的实现

我在上一节中介绍了开始功能的实现,在这篇博客中将介绍新局功能的实现 首先看一下效果图 通过观察上图的实现效果可知新局的实现思路 1.隐藏选择框 2.隐藏32个棋子 3.初始化32个棋子 首先在SceneGame的init()中添加下面的代码用于创建选择框 //创建一个选择框 //当选中某个棋子的时候,选择框会套在选好的棋子上 _selectSprite = CCSprite::create("selected.png"); addChild(_selectSprite); //隐藏选择

简单五子棋,没有电脑AI

刚学了C#委托,做了个五子棋练习,把前台绘制和后台逻辑分开,前台绘制方法用委托传给后台逻辑. 界面好简单... 先看类图 控制类控制整个游戏的逻辑,包括调用棋盘类的属性初始化棋盘.初始化两个棋手.轮流落子.棋盘里有一个二维数组保存整个棋盘的落子情况,棋手里也有一个二维数组保存自己的落子情况.方向类是为了方便判断输赢的. 下面是代码:注释很详细就不说明了: 主要控制类: 1 using System; 2 using System.Collections.Generic; 3 using Syst

Cocos2d-X开发中国象棋《六》游戏开始功能的实现

我在前面的博客Cocos2d-X开发中国象棋<四>设计游戏场景中介绍了在游戏场景上场景了一个开始按钮,并没有实现开始的功能 游戏开始功能的实现效果: 实现思路: 1.显示随机位置的棋子 2.将棋子移动到棋盘上的指定位置 具体实现方式: 首先在SceneGame类中定义一个initStone()函数用于初始化棋子 initStone()函数实现了3个功能 1.创建棋子 2.将棋子设置到随机位置 3.隐藏棋子 initStone()中的代码: //初始化32个棋子 void SceneGame::

chineseChess

最近学习了chineseChess的Qt实现,把一些东西总结一下: 实现功能: 1.人人对战 2.人机对战 3.网络版 一.基础性工作:(人人对战) 1.棋盘和棋子的绘制(QPinter,drawLine(QPoint(0,0),QPoint(0,9))): 棋盘: 10行,9列,中间有楚河汉界:九宫格:兵和炮的梅花位置. 棋子:32颗棋子都是由圆圈和汉字组成:drawStone(painter, i) 注意:1.死棋不画  if(_s[id]._dead)   return; 2.线:pain

中国象棋游戏Chess(3) - 实现走棋规则

棋盘的绘制和走棋参看博文:中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制,中国象棋游戏Chess(2) - 走棋 现在重新整理之前写的代码,并且对于每个棋子的走棋规则都进行了限制,不像之前那样每个棋子都可以走到任意位置. 也实现了红先黑后,并且每一方走一步,交替走棋的功能. 直接看代码: // Board.h // Board类实现了棋盘的绘制以及显示 // #ifndef BOARD_H #define BOARD_H #include <QFrame> #include &quo

程序员代码面试指南 IT名企算法与数据结构题目最优解 ,左程云著pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介  · · · · · ·这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失.“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联系,使知识的学习避免碎片化

象棋人工智能算法的C++实现(一)

点击上方"程序人生",选择"置顶公众号"第一时间关注程序猿(媛)身边的故事 前言:自AlphaGo战胜世界著名九段围棋手李世石之后,我就对棋类人工智能产生了极大的兴趣,并想要自己实现象棋的人工智能.然而那个时候我还在读高二,没有这么深厚的代码基础,所以那个时候也就只能想想了.但是现在不一样了,通过学习编程,已经可以让我在棋类人工智能这个领域向前探索了.推荐下小编的C++学习群:513801371,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的