1228: 趣味程序設計_出售金魚
題目描述
令狐沖將養的一缸金魚分5次出售:第1次賣出全部的一半加1/2條;第2次賣出餘下的三分之一加1/3條;第3次賣出餘下的四分之一加1/4條;第4次賣出餘下的五分之一加1/5條;最後賣出餘下的11條。問原來魚缸中共有多少條魚?答案是59條。
爲了防止大家混AC,題目稍微改一下。
令狐沖將養的一缸金魚分m次出售(m的取值爲2,或3,或4,或5):第1次賣出全部的一半加1/2條;第2次賣出餘下的三分之一加1/3條;第3次賣出餘下的四分之一加1/4條;第4次賣出餘下的五分之一加1/5條;......;第m-1次賣出餘下的m分之一加1/m條,最後賣出餘下的11條。問原來魚缸中共有多少條魚?
若輸入的m是5,則答案仍是59條。
輸入
每行輸入一個m值,m的取值爲2,或3,或4,或5。
輸出
對應輸出原來魚缸中共有多少條魚?,輸出一個數字即可。
樣例輸入
5
4
3
2
4
樣例輸出
59
47
35
23
47
提示
從X=23開始試探,步長取2,前4次中,第i次出售後留下:X=X-(X+1)/(i+1),第4次出售後餘下11條。
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
int m;
while(cin>>m){
int ans=11;
for(int i=m-1;i>=1;i--){
ans=(ans*(i+1)+1)/i;
/*
在此證明一下爲什麼 (ans*(i+1)+1) 一定能被 i 整除,
(ans*(i+1)+1)%i==0 -> ans*(i+1)+1+k*i=0 -> k*i-ans*(i+1)=1; 即證i和i+1互質,
而(i+1)/i=1+1/i;可得當i>1時,i和i+1互質,原等式得證。
*/
}
cout<<ans<<endl;
}
return 0;
}