ABCDE五人夜里合伙捕鱼,第二天凌晨都疲惫不堪,于是各自找地方睡觉。第二天,A第一个醒来,将鱼分成5份,扔掉多余的一条,拿走自己的一份。BCDE重复同样操作,问他们至少合伙捕了多少鱼?
解题思路:设鱼的总数是x,A分完后剩下的鱼数为n1,
第一次分完后:n1=4*(x-1)/5
第二次分完后:n2=4*(n1-1)/5
第三次分完后:n3=4*(n2-1)/5
第四次分完后:n4=4*(n3-1)/5
第五次分完后:n5=4*(n4-1)/5
从最后一次开始向前反推,设分鱼函数为sub,则该函数每次返回值为上一次分完后的鱼数。
程序代码:
1 int sub(int n) 2 { 3 4 if(n==1) 5 { 6 static int i; 7 do{i++;} 8 while(i%4!=0); 9 return (i/4*5+1); 10 } 11 else 12 { 13 int x; 14 do 15 { 16 x=sub(n-1); 17 }while(x%4!=0); 18 return (x/4*5+1); 19 } 20 } 21 22 void main() 23 { 24 int n=5; 25 int x; 26 x=sub(n); 27 printf("一共有%d条鱼\n",x); 28 system("pause"); 29 }
浙公网安备 33010602011771号