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

问题:
桌上有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 ret

find_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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值