首页 > 试题广场 >

小东分苹果

[编程题]小东分苹果
  • 热度指数:13077 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

果园里有一堆苹果,一共n头(n大于1小于8)熊来分,第一头为小东,它把苹果均分n份后,多出了一个,它扔掉了这一个,拿走了自己的一份苹果,接着第二头熊重复这一过程,即先均分n份,扔掉一个然后拿走一份,以此类推直到最后一头熊都是这样(最后一头熊扔掉后可以拿走0个,也算是n份均分)。问最初这堆苹果最少有多少个?


输入描述:
给定一个整数n,表示熊的头数


输出描述:
返回最初的苹果数。保证有解。
示例1

输入

2

输出

3

从后往前推,知道为什么小熊数量有限制了,上了9个后花了十几秒...

class Apples:
    def getInitial(self, n):
        if n == 2:
            return 3
        else:
            begin = 1              #如果不是2个小熊,那么最后一个小熊最少得到一个,初始化从1开始
            b = 0
            while True:
                res = begin * n + 1
                for i in range(n-1):
                    a,b = divmod(res,n-1)
                    if b != 0:
                        break
                    res = a*n + 1    #余数一直为零才符合要求
                if b != 0:
                    begin += 1
                else:
                    return res
编辑于 2018-10-19 22:46:00 回复(0)
# -*- coding:utf-8 -*-
#设苹果总数x, 由题意知(x+n-1) 可被n 整除,第一只熊分到 (x+n-1)/n只苹果(分到的+扔掉的)
#此时还剩下(n-1)(x+n-1)/n 只苹果。 第二只熊分得 (n-1)(x+n-1)/n^2 只苹果(分到的+扔掉的)
#依次类推 , 最后一只熊(分到+扔掉)K= (n-1)^(n-1)(x+n-1)/n^n  只苹果
#K 为自然数,故分子必须是n^n的倍数
#由于(n-1)^(n-1) 与 n^n 互质, 则必有 (x+n-1) = t * n^n 
#显然 t 取 1 时x 最小, x= n^n -n+1
class Apples:
    def getInitial(self, n):
        ans=n**n-n+1
        return ans

发表于 2018-07-30 15:34:40 回复(0)