熊分苹果的问题

今天参加笔试,遇见一道编程题,给定一个1~9的整数N代表熊的数目,每只熊按照如下方式分苹果:先将苹果平均分为N份,再扔掉一个。要求输出最少的苹果总数?

思路1:逐层向下,设总数为X,则第一次每一份为(X-1)/N个苹果,第二次为((N-1)*((X-1)/N)-1)/N,依次类推.......,发现到最后由于嵌套的层数过多,已经被弄晕了,果断换方法。

思路2:(采取补苹果的方法)由题描述,因为要扔一个苹果,所以扔一个苹果==补N-1个苹果,因此第一个熊得到的苹果数为(X+N-1)/N,第二个熊得到的为(N-1)*(X+N-1)/(N*N),。。。。第N个熊为(N-1)的(N-1)次方*(X+N-1)/N的N次方。

由于熊肯定得到的是整数个苹果,所以第N个熊的苹果数(N-1)的(N-1)次方*(X+N-1)/N的N次方必为一个整数。很显然(N-1)的(N-1)次方/N的N是不可能整除的,因此(X+N-1)必为N的N次方的整数倍,我们主需要去尝试当(X+N-1) = k倍的N的N次方即可,k从1开始走起,遇到第一个满足(X+N-1) = k倍的N的N次方的k时,对应的x即为最少的苹果数。

基于上面思想:有如下代码

时间: 2024-10-24 14:40:00

熊分苹果的问题的相关文章

C语言 · 分苹果

算法提高 分苹果 时间限制: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 {

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

[华为机试真题]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.