在中国象棋棋盘上,输出将帅不冲突的所有的位置,只使用一个变量。 想法:I 将帅能运行的空间 3 x 3,如果将在图中 A的位置, 帅在下面的6个位置都是合法的, 图中将帅不冲突的位置一共有 6 x 9 = 54 个 4 …
分类:编程之美
编程之美 - 烙饼问题
把一摞烙饼按大的在下,小的在上拍好,一只手一次只能抓住上面的几张饼,把它们上下颠倒个个。反复几次后把饼排好。 问把饼排好需要的最小的次数。 问题:是看看把饼排好需要的最小次数。 找最优解的问题,可以想到用穷举法。 用递归…
编程之美 - 买书问题
问题描述: 一套书共 5 卷,单独买每一卷的每一本8元,没有折扣。 如果一次买不同的卷的几本会有相应的折扣,折扣定义如下: 不同的 2本 : 折扣 5% 不同的 3本 : 折扣 10% 不同的 4本 : 折扣 20% 不…
编程之美 - 光影切割问题
在一个平面内有一个矩形区域,直线穿过矩形可以将其分割为不同的区域,且在 这个平面中不存在三条直线相交一点的情况。求当有N条直线穿过矩形时,它被分割为多少个区域? 例如: 图中有两条直线将矩形分割为 4 个区域。 直线条数…
编程之美 - 爬楼梯问题
问题: 电梯在高峰时为了提高效率,当人们进入电梯选择好楼层后,根据算法只停在其中的一层。这个算法要求电梯里所有的人爬楼梯的总数最少。 想法 I:算是穷举法吧,把每个人可能会爬的楼层数都计算出来,然后逐一求和后,…
编程之美 - 安排见面会问题
问题:有n个人会参加m个会议,其中一个人会参加m个会议中的若干个 。怎样安排m个会议的日程使效率最高。 思路:书中的想法是将它转换为一个图的问题 例如:有5个人A,B,C,D,E 会参加5个会议 1,2,3,4,5,参加…
编程之美 - 一排石头游戏及扩展问题
问题:一堆石头排成一排,两个人轮流从其中抓取一块或两块石头(两块石头必须是挨着的),谁拿到了最后的石头,谁就是赢家,编写算法保证先抓的人一定能赢。 思路: 假设有三块石头,甲先拿中间的 一块,这样无论乙怎么拿甲都会赢。 …
编程之美 - 抓石头游戏(2)
游戏规则: N块石头,两个玩家 A,B,A负责将石头分成M堆,然后按BABA顺序来抓取, 每人每次可以从任意堆抓取大于1的任意块石头,取得最后一块石头的人赢。 书中的分析: 如果每堆石头只有一块,当M是奇数的…
编程之美 - 抓石头游戏(3)
游戏规则: 有两堆石头,玩家A 和 B,两个人可以从一堆石头中取任意数目的石头或从两堆石头中取相同数量的石头。 最后取得所有石头的人胜。 书中的分析: 从最简单的情况入手 只有一块石头 == &g…
编程之美 - 寻找灌水王及扩展问题
问题描述: 在一个论坛中,一个ID发的帖子超过了半数,问怎样能快速的找出这个ID。 算法描述: 书中给出了几种不同的思考方式, 1) 先排序,然后逐个统计 2) 排序后,第 N/2个元素一定是这个ID 最好的方式是第三种…
编程之美 - 1 的数目
问题: 给定一个十进制整数N,写下从1开始到N的所有数字,然后数一下其中1的个数。 例如N = 16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,&n…
编程之美 - 浮点数的精确表示
问题描述: 如何将浮点数(小数)转换为分数的形式,这样可以更精确的表达出浮点数的值。 问题分析: 小数可以分为两种,有限小数和无限循环小数。 有限小数的处理相对简单: 只要把它乘以10的N次方,转换为整数,再和10的N次…