试题传送门
显而易见是一道递推题
递推题的两个关键:一个是边界 一个是递推公式
思路
若假设总苹果数是x,第一只猴子一顿操作之后吃了m个,藏了一部分。即藏了(x-m)/n个,即藏了的和吃的一共是(x-m)/n+m。在这里x-m是并不能被n整除的,因而我们可以稍作改动,把总数设为y=x+(n-1)*m,这样就能确保每次都被n整除了(为什么是n-1等下会讲)。
第一只猴子吃m个,再藏(x-m)/n个(和上面不做改变的情况相同),即第一只猴子共拿了y/n个苹果,苹果剩((n-1)y/n,依次计算下去则可以推算出第一天最后一个猴子分了后还剩((n-1)^n /n^n)y;
题目要求是至少,即可设平均分配量为1,即((n-1)^n /n^n+1)y=1,要使该等式成立,则y = n^n+1,再根据y = x + (n-1)m可以得到x = n^n+1 - (n-1)m;
代码一
#include
using namespace std;
int n,m;
long long sum;
int main()
{
cin>>n>>m;
sum=pow(n,n+1)-(n-1)*m;
cout<
return 0;
}
代码二 (一的更清晰版)
#include
int main(){
int n,m;
scanf("%d%d",&n,&m);
int a=n+1;
int b=1 ;
while(a--){
b*=n;
}
printf("%d",b-((n-1)*m));
return 0 ;
}
技术萌新//
发布了10 篇原创文章 · 获赞 1 · 访问量 318
私信
关注
标签:long,int,猴子,蓝桥,苹果,菜鸡,打卡,include,递推
来源: https://blog.csdn.net/u011916098/article/details/104570615