问题描述:
海滩上有一堆桃子,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>