挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

宫里新晋了十几名嫔妃,皇上说,“朕有一批上好的蜀锦料子,想要分于各位,朕今日心情大好,倒不如一起来玩个游戏!”。


皇上继续说道,“游戏规则是这样的:有n名嫔妃围坐成一圈,朕给每位嫔妃都随机分发偶数匹蜀锦,然后开始游戏,游戏中每位嫔妃都需要把自己蜀锦的一半分给左侧的嫔妃。一轮游戏后,拥有奇数匹蜀锦的嫔妃朕会再补给一匹蜀锦,从而变成偶数。反复进行这个游戏,直到各位嫔妃手上的蜀锦数量相同为止”。


此时,皇上在思考:在已知初始蜀锦数的情况下,朕一共需要补发多少匹蜀锦呢?

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

皇上分蜀锦

问题整理

我们来帮助皇上解决这个疑惑,根据故事情节,题目要求如下:

要求:

<code>输入:
① 程序首先读入一个整数n(2/<code>

样例:

<code>输入:

> 请输入嫔妃人数:3

> 请输入每人的初始蜀锦数(用空格隔开):2 2 4

输出:

> 皇上需要补发4匹蜀锦

/<code>

思路分析

我们可以看出该问题属于递归类问题,因此我们需要定义递归函数来解决这个问题。

我们把每位嫔妃的蜀锦数定义在列表变量list中,然后构造一个递归函数shareCloths(n,list),其中n为嫔妃标识,list表示每位嫔妃手上的蜀锦数。我们把每位嫔妃蜀锦数的一半也记录在一个新的列表变量halfList中,当然list和halfList这两个列表中每位嫔妃的顺序是一致的。

好了,接下来就是分配蜀锦的过程了,每位嫔妃把自己蜀锦的一半都给左侧的人,分完一轮之后再依次判断每人手上的蜀锦数是否为奇数,如果是,则皇上应补一匹,程序中别忘记记录补发的蜀锦数喔!

程序最后,我们再来判断每位嫔妃的蜀锦数是否相等,如果相等则可求得皇上需补发的蜀锦数,如果不相等则继续递归函数。

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

递归函数演示

分析到这里,我相信很多朋友已经开始着手尝试编写代码了。如果你还没有代码编写思路,没关系,跟着我一起来看看如何用Python代码实现它,出发!

代码实现

① 定义全局变量,并定义递归函数shareCloths(n,list):

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

定义递归函数

② 用列表halfList来记录当前每位嫔妃蜀锦数的1/2:

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

记录数量

③ 每位嫔妃把自己蜀锦的1/2分给左侧的嫔妃:

注意:最后一位嫔妃的蜀锦数 = 第一位嫔妃上一轮的蜀锦数的1/2 + 最后一位嫔妃的蜀锦数的1/2

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

记录数量

④ 拥有奇数蜀锦的嫔妃,则皇上需补一匹来凑成偶数:

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

奇数判断

⑤ 判断每位嫔妃的蜀锦数是否相等:

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

判断是否相等

⑥ 如果每位嫔妃的蜀锦数不相等,则继续递归函数:

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

递归函数

⑦ 输入嫔妃人数和初始的蜀锦数,并存储及校验数据:

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

输入与校验

⑧ 调用递归函数:

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

调用函数

⑨ 输出结果,即皇上需补发的蜀锦数:

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

输出结果

完整代码

下面列出此问题的完整Python代码,以方便你的阅读与思考。

挑战下《甄嬛传》中嫔妃蜀锦的算法问题?附录Python参考代码

完整代码

最后让我们一起来看看程序的运行效果:

<code>

> 请输入嫔妃人数:4

> 请输入每人的初始蜀锦数(用逗号隔开):4 8 12 6

> 皇上需要补发10匹蜀锦

/<code>

你们表现都很不错,朕很满意。看来你们科技时代的人会编程就是不一样,等来日朕有空了,等你来给朕讲下编程的方法,退下,朕要休息了。


分享到:


相關文章: