试题2---分苹果

题目:

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

给定一个整数n,表示熊的个数,返回最初的苹果数。保证有解。

测试样例:

2

返回:

3



def one_pear_operation(m, i, n):
    ### 第i+1熊分苹果之前的苹果数量    ### m为第i只熊分苹果之前的苹果数目    ### n为熊的总数目
    p=float(m*n)/(n-1)+1
    t=float(p-1)/n
    if (not t.is_integer()) and i>0 :   ### 每只熊都应该拿走整数个苹果,并且只有最后一只熊被允许拿走0个苹果扔掉一个苹果,剩余0个苹果
        return 1.1
    else:
        return p

def processing(n, p):    ### 从最后一只熊倒推,如果假设的最后一只熊拿苹果之前的苹果数量不符合要求就递增1,知道满足条件为止
    s=p
    flag=1
    for i in range(n-1):
        s=one_pear_operation(s,i,n)
        if not s.is_integer():
            flag=0
            break
    return s, flag

def main(n):    ### 最后一只熊分苹果之前最少还有1个苹果
    p=1.0
    while(True):
        s=p
        s, flag=processing(n,s)
        if flag==1 and s>2:
            print int(s)
            break
        else:
            while(True):
                p +=1
                temp=float(p-1)/n
                if temp.is_integer():
                    break

if __name__==‘__main__‘:
    #processing(6,1)
    main(3)
    #print s

 
时间: 2024-10-10 07:38:34

试题2---分苹果的相关文章

COJN 0583 800602分苹果

800602分苹果 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 第一行是测试数据的数目t,以下每行均包含二个整数M和N,以空格分开. 输出 对输入的每组数据M和N,用一行输出相应的K. 输入示例 17 3 输出示例 8 其他说明 数据范围:0<=t<=20,1<=M,N&l

熊分苹果的问题

今天参加笔试,遇见一道编程题,给定一个1~9的整数N代表熊的数目,每只熊按照如下方式分苹果:先将苹果平均分为N份,再扔掉一个.要求输出最少的苹果总数? 思路1:逐层向下,设总数为X,则第一次每一份为(X-1)/N个苹果,第二次为((N-1)*((X-1)/N)-1)/N,依次类推.......,发现到最后由于嵌套的层数过多,已经被弄晕了,果断换方法. 思路2:(采取补苹果的方法)由题描述,因为要扔一个苹果,所以扔一个苹果==补N-1个苹果,因此第一个熊得到的苹果数为(X+N-1)/N,第二个熊得

C语言 &#183; 分苹果

算法提高 分苹果 时间限制:1.0s   内存限制:256.0MB 问题描述 小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1..N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋友有多少苹果. 输入格式 第一行两个整数N.M,表示小朋友个数和老师个数. 接下来M行,每行三个整数Li.Ri.Ci,意义如题目表述. 输出格式 一行N个数,第i个数表示第i个小朋友手上的水果. 样例输入 5 31 2 12 3 22 5

蓝桥杯 算法训练 ALGO-121 猴子分苹果

算法训练 猴子分苹果 时间限制:1.0s   内存限制:256.0MB 问题描述 秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分.这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果.第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起.这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果.第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个.问,原来这些猴子至少采了多少个苹果. 输入格式 两个整数

分苹果

题目: 穷举法:由于3 1 1和1 3 1 是一种分法,所以也就是说在N个篮子里的苹果数目是 n1<=n2<=......<=nn.所以只要进行N次循环,假设上层循环标量是i,则下层循环时j=i. 由于事先N,即篮子的数目是不确定的,所以只能使用递归来确定循环层数. 1 #include<iostream> 2 using namespace std; 3 int count; 4 int foo(int n,int m,int prei,int temp[10]) 5 {

[华为机试真题]70.分苹果

题目 M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放. 1<=M<=10,1<=N<=10 例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法 输入 7 3 输出 8 思路 设f(m,n) 为m个苹果,n个盘子的放法数目: 当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响.即if(n>m) f(m,n) = f(m,m) 当n<=m:不同的放法可以分成两类: (1)有至少一个盘子空着,即相当于f(m,n) = f(m

算法历练之路——分苹果

分苹果 时间限制: 1Sec 内存限制: 128MB 提交: 231 解决: 69 题目描述小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1..N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋友有多少苹果. 数据规模和约定 100%的数据,N.M≤100 000,1≤Li≤Ri≤N,0≤Ci≤100. 输入第一行两个整数N.M,表示小朋友个数和老师个数. 接下来M行,每行三个整数Li.Ri.Ci,意义如题目表述.输

分苹果问题的C++和Python实现

很好玩的一个问题.话说小明的苹果怎么可能一模一样? 显然这并不是重点.重点在于抽象这个问题的方法. 如果从M个苹果,拿出N个苹果,问有几种可能性,很明显这是典型的组合问题: combination algabra; 如果把M个苹果等分成N份.显然只有1种可能. 把苹果分成N堆,求可能性,我一时半会想不出什么数学模型.自然而然,想到了数学方法:迭代逼近和递归. 题目额外说明,1,3,1 和1,1,3算同一种分法.其分发可能等价于将苹果递减或者递增排列. 于是我们开始递归计数: 递归操作:遍历M~0

回档|分苹果

背景:今晚在tyvj参加了一下比赛,没想到可耻的跪了.第一题地球人都知道spfa,结果我写了个坐标类DP还得了30分……悲剧.唯一欣慰的是我用组合数学做出了第二题,奠定了我们学校有五个人冲进前六的基础.先发第二题好了. 题目:由于tyvj比较坑,比赛的题目竟然没了!只能说下大体意思.给定n个苹果,要求分到3个袋子中.袋子是无序的,问有多少种情况,并对k取模. 输入解释:第一行,输入两个整数n,k 输出解释:输出只有一行,即方案总数对k取模的结果. 输入样例: 11 10000 输出样例: 952

动态规划之分苹果

题目描述:将M个苹果放置到N个盘子中,可以有盘子为空,但是不分顺序,例如5个苹果分到3个盘子中,1+1+3和1+3+1视为同一种方法,求所有的方法总数. ****动态规划***** import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args) 4 { 5 /* 6 *以dp[i][j]表示i个苹果放置到j个盘子的方法数 7 *i个苹果放到j个盘子中(不分顺序)分为两种情况 8 *1.