令狐冲将养的一缸金鱼分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。
对应输出原来鱼缸中共有多少条鱼?,输出一个数字即可。
从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; }