题目描述:



果园里有堆苹果,N(1<N<9)只熊来分。第一只熊把这堆苹果平均分为N份,多了一个,它把多的一个扔了,拿走了一份。第二只熊把剩下的苹果又平均分成N份,又多了一个,它同样把多的一个扔了,拿走了一份,第三、第四直到第N只熊都是这么做的,问果园里原来最少有多少个苹果?



算法练习 8 :分苹果_公众号

算法思路分析:

1、输入熊的个数N;

2、推导:

假设每个熊分别拿了x1、x2、...xN,则:

N*x1 + 1 = num;

N*x2 + 1 =num - (x1+1);

N*x3 + 1 = num -(x1+1)-(x2+1);

...

计算得出:xi-1 = N*xi +1 /(N-1);

3、思考:求至少原来有多少苹果,也就是说最后一个熊至少拿到1个苹果,即xN=1;

4、运用递归进行求解:xi-1(i-1是下标) = N*xi +1 /(N-1) 且必须为正整数,求出x1;

5、求出num=N*x1 + 1;

代码练习:

#!/usr/bin/env python
# coding=utf-8

if __name__ == "__main__":
    def fn(N):
        x = 0
        while x >= 0:
            num = N * x + 1
            # numtotal = []
            # numtotal.append(num)
            k = 0
            for i in range(N):
                if (num - 1) % N == 0:
                    num = int((num - 1) / N) * (N - 1)
                    k += 1
            if k == N:
                return (N * x + 1)  #计算输出num
                break
            else:
                x += 1
        # print numtotal[len(numtotal)-1]  #也可以直接输出num
    N = input()
    print fn(N)

详细内容请关注公众号:目标检测和深度学习

算法练习 8 :分苹果_公众号_02