问题描述:
海滩上有一堆桃子,m只猴子来分,第一只猴子把这堆桃子平均分成m份,多了一个,
这只猴子把多的一个扔入海中,拿走了一份,第二只猴子把剩下的桃子又平均分成m份,又多了一个,他同样把多的一个仍入海中,
拿走了一份,第三,第四,...,第m只猴子都是这样做的,问海滩上原来最少有多少个桃子?
/*
输入m=1,桃子数量n=2
输入m=2,桃子数量n=7
输入m=3,桃子数量n=25
输入m=4,桃子数量n=253
输入m=9,桃子数量n=387420481
*/
公式:n=m^m-m+1 (3<=m<=9)
<span style="font-size:18px;">#include"iostream"
using namespace std;
int main()
{
long m,s,n=0,i=0;
cin>>m;
while(1)
{
n++;
s=n;
for(i=1;i<=m;i++) //分桃
{
if((s-1)%m==0&&s>m)
s=s-1-(s-1)/m;
else break;
}
if((i-1)==m) break;
}
cout<<n<<endl;
return 0;
}</span>
本文探讨了一道经典的数学问题——猴子分桃问题。该问题描述了m只猴子如何分配一堆桃子的过程,并给出了一个数学公式n=m^m-m+1(3<=m<=9),用于计算最初桃子的最少数量。此外,还提供了一段C++代码实现,用于找出满足条件的最小桃子数。
1475

被折叠的 条评论
为什么被折叠?



