题目描述:
果园里有堆苹果,N(1<N<9)只熊来分。第一只熊把这堆苹果平均分为N份,多了一个,它把多的一个扔了,拿走了一份。第二只熊把剩下的苹果又平均分成N份,又多了一个,它同样把多的一个扔了,拿走了一份,第三、第四直到第N只熊都是这么做的,问果园里原来最少有多少个苹果?
算法思路分析:
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)
详细内容请关注公众号:目标检测和深度学习