BIT PP-2018 猴子分桃
阿新 • • 發佈:2018-12-12
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; } }