python分苹果问题_给大家分享一个「Python算法题」分苹果

水深无声 2023-01-09 03:39 308阅读 0赞

把num初值为 N-1之后,开始倒推,上一只熊取之前的苹果数为num = num + num/(N-1)+1,再判断这个数字能否被N-1整除,若可以,继续向前倒推,若不能,说明num不满足条件,将num初值更新为2*(N - 1),重复上述过程,若nun不满足条件,再设置为3*(N-1),依次类推,直到循环中的num都能被N-1整除,这时候的num为满足条件的最小值,可能说的不是很清楚,直接看代码

![Image 1][]

再仔细分析一下这个题目,如果把每只熊取之前的苹果数记做一个序列

![Image 1][]

根据之前的分析,倒数第k次取之前的苹果数是倒数k+1次取之前的苹果扔掉一个再取走一份后剩下的,所以有关系式:

![Image 1][]

同时倒数第一只熊取之前的苹果数满足条件:

![Image 1][]

这里|表示整除,因为它需要扔掉一个然后分成N份。换种表示方式可以写成

![Image 1][]

综合到一起,所有的条件可以描述为

![Image 1][]

有没有感觉很熟悉,这不就是高中的数列递推公式?把通项公式求出来就完事了,根据上面的递推式,有

![Image 1][]

最后得到

![Image 1][]

因为xN必须是整数,所以m取值不能任意,有一定的限制,实际上已经非常明确了,要使得xN是整数,只要让m的取值恰好可以消掉中式子的分母就可以了,最终可以得到

![Image 1][]

其中

![Image 1][]

这样我们实际上求出了所有满足条件的苹果数量,如果只要最小数量,让t=1就可以啦,最终得到

![Image 1][]

这样代码就变得非常非常非常简单。

![Image 1][]

[Image 1]:

发表评论

表情:
评论列表 (有 0 条评论,308人围观)

还没有评论,来说两句吧...

相关阅读

    相关 面试之__苹果(java实现)

    问题是:n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛

    相关 编程苹果

    题目描述 n 只奶牛坐在一排,每个奶牛拥有 a i  个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果

    相关 猴子苹果

    题目:秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹

    相关 猴子苹果-Java

    问题描述 秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。 第一只猴子悄悄来到山洞,把苹果平均分成n份