1. 程式人生 > >BIT PP-2018 猴子分桃

BIT PP-2018 猴子分桃

1.猴子分桃 有一堆桃子和N只猴子,第一隻猴子將桃子平均分成了M堆後,還剩了1個,它吃了剩下的一個,並拿走一堆。後面的猴子也和第1只進行了同樣的做法,請問N只猴子進行了同樣做法後這一堆桃子至少還剩了多少個桃子(假設剩下的每堆中至少有一個桃子)?而最初時的那堆桃子至少有多少個?

輸入 輸入包含二個數據,資料間用空格隔開。第一個資料為猴子的只數N(1≤N≤10),第二個資料為桃子分成的堆數M(2≤M≤7)。

輸出 輸出包含兩行資料,第一行資料為剩下的桃子數,第二行資料為原來的桃子數。

測試用例 in: 3 2 out: 1↵ 15↵

遞推題,可以推得遞推式p[i]=(p[i-1]*m+1)/(m-1),但是要注意這個公式只有在p[i-1]*m+1整除m-1的條件下才成立。 這是程式碼:

#include<stdio.h>
int m,n;
long long p[1000];
int main()
{
	scanf("%d%d",&n,&m);
	int i=0;
	p[0]=1;
	while(i<n)
	{
  		for(i=1;i<n;i++)
		{
			if((p[i-1]*m+1)%(m-1)!=0)
				break;
			else
				p[i]=(p[i-1]*m+1)/(m-1);
		}
		p[0]++;
	}
	if(n==1)
	{
		printf("%lld\n",p[0]*m+1-p[0]-m);
		printf("%lld\n",p[n-1]*m+1-m);
		return 0;
	}
	else
	{
		printf("%lld\n",p[0]*m+1-p[0]-m);
		printf("%lld\n",p[n-1]*m+1);
		return 0;
	}
}