一道算法题:12个黑球和1个白球围成一个圆

来源:互联网 发布:网络电影如何盈利 编辑:程序博客网 时间:2024/05/17 06:29
问题:
桌上有12个黑球和1个白球围成一个圆,按顺时针方向顺序数到13就拿走对应的一个球,
如果要求最后拿走的是白球,请问该从哪个球开始数数。

分析:

从最后一轮开始考虑,按轮次倒推。可以用递归法求解。


python代码:

N=13# 把球看做从左到右的一行print('White ball position from left:')def find_ball(n):    if n == 1:        return 1    ret = N % n + find_ball(n-1)    if ret > n:        ret %= n    print('%2d round: %d'%(N - n + 1, ret))    return retfind_ball(N)


输出:
White ball position from left:
12 round: 2
11 round: 3
10 round: 4
9 round: 2
8 round: 3
7 round: 2
6 round: 7
5 round: 2
4 round: 5
3 round: 7
2 round: 8
1 round: 8

开始的时候,白球位于第8个,也就是前面有7个黑球。


0 0