分鱼问题
A、B、C、D、E这5个人合伙夜间捕鱼,凌晨时都已经疲惫不堪,于是各自在河边的树丛中找地方睡着了。第二天日上三竿时,A第一个醒来,他将鱼平分为5份,把多余的一条扔回河中,然后拿着自己的一份回家去了;B第二个醒来,但不知道A已经拿走了一份鱼,于是他将剩下的鱼平分为5份,扔掉多余的一条,然后只拿走了自己的一份;接着C、D、E依次醒来,也都按同样的办法分鱼。问这5人至少合伙捕到多少条鱼?每个人醒来后所看到的鱼是多少条?
解答
分析
假设5个人合伙捕了x条鱼,则A走之后,还剩下4(x-1)/5条鱼。
这里实际包含了一个隐含条件:假设Xn为第n(n=1、2、3、4、5)个人分鱼前鱼的总数,则(Xn-1)/5必须为正整数,否则不合题意,即(X-1)mod5=0。且每个人走之后,都是剩下4(Xn-1)/5条鱼。所以应该有下面等式:
X4=4(X5-1)/5
X3=4(X4-1)/5
X2-4(X3-1)/5
X1=4(X2-1)/5
则只要知道一个人的值就可以知道其他所有人的值。题目中只要求至少的条数,所以在得到第一个答案时退出循环。
题目有多种解法,在这里只给出其中一种。
代码
#include<stdio.h>
int main(){
int a,b,c,d,e;
for(a=6;;a+=5){
b=4*(a-1)/5;
c=4*(b-1)/5;
d=4*(c-1)/5;
e=4*(d-1)/5;
if(b%5==1&&c%5==1&&d%5==1&&e%5==1){
printf("sum:%d\n",a);
printf("a:%d b:%d c:%d d:%d e:%d",a,b,c,d,e);
break;
}
}
return 0;
}