a、b、c、d、e這5個人合夥夜間捕魚,凌晨時都已經疲憊不堪,於是各自在河邊的樹叢中找地方睡著了。第二天日上三竿時,a第乙個醒來,他將魚平分為5份,把多餘的一條扔回河中,然後拿著自己的乙份回家去了;b第二個醒來,但不知道a已經拿走了乙份魚,於是他將剩下的魚平分為5份,扔掉多餘的一條,然後只拿走了自己的乙份;接著c、d、e依次醒來,也都按同樣的辦法分魚。問這5人至少合夥捕到多少條魚?每個人醒來後所看到的魚是多少條?
設總共捕了x條魚,每個人看到的魚共有xn條, 則:
x1=x
x2=(x1-1)/5*4
x3=(x2-1)/5*4
x4=(x3-1)/5*4
x5=(x4-1)/5*4
其中,(xn-1)%5=0必定成立,即題中所提到的,扔掉一條,取五分之一。
那麼就有x,使得遞推所得到的項滿足(xn-1)%5=0即可。
c:
#includeint fish(int n, int x)//遞迴函式
return 0; //所取數值不符合題意,返回main()重新取x
}int main()
}while(!flag);
for (i=1;i<=5;i++)
return 0;
}
python:
def fish(n, x):
if (x - 1) % 5 == 0:
if n == 1:
return 1
else:
return fish(n - 1, (x - 1) / 5 * 4)
return 0
x = 6
while true:
x += 5
if fish(5, x) == 1:
print(x)
break
for i in range(1, 6):
print("第人看到的魚有條".format(i, x))
x = int((x - 1) / 5 * 4)
反向遞推法:
解決e和d的問題(規模為2),就可以解決d和c的問題,也就是e、d、c的問題(規模為3),最後解決所有問題。
由x(n+1)=(xn-1)/5*4得,xn=x(n+1)*5/4+1
c:
#includeint main()
if(i == 0)
break;
fish[5]+=5;
}printf("總共有%d條魚\n",fish[1]);
for(i=1; i<=5; i++)
printf("第%d個人看到%d條魚\n", i, fish[i]);
return 0;
}
python:
fish = [0, 0, 0, 0, 1]
i = 0
while true:
fish[4] += 5
for i in range(3, -2, -1):
if fish[i + 1] % 4 != 0:
break
fish[i] = int(fish[i + 1] * 5 / 4 + 1)
if fish[i] % 5 != 1:
break
if i==-1:
break
print("總共捕了",fish[0],"條魚")
for i in range(0, 5):
print("第人看到條魚".format(i+1, fish[i]))
利用Python語言解決分魚問題
a b c d e這5個人合夥夜間捕魚,凌晨時都已經疲憊不堪,於是各自在河邊的樹叢中找地方睡著了。第二天日上三竿時,a第乙個醒來,他將魚平分為5份,把多餘的一條扔回河中,然後拿著自己的乙份回家去了 b第二個醒來,但不知道a已經拿走了乙份魚,於是他將剩下的魚平分為5份,扔掉多餘的一條,然後只拿走了自己...
C語言 遞迴解決分魚問題。
a b c d e五個人在某天夜裡合夥去捕魚,到凌晨時疲憊不堪,於是各自找地方睡覺。第二天a醒來,他將所有的魚分成5份,把多餘的一條魚扔掉,拿走自己的乙份。b醒來,也將剩下的魚分為5份,把多餘的一條扔掉,拿走自己的乙份。c d e 也同樣,分別醒來後,也將剩下的魚分為5份,把多餘的一條扔掉,拿走自己...
遞迴解決分魚問題 c語言
問題描述 a,b,c,d,e這5個人合夥夜間捕魚,凌晨時都已經疲憊不堪,於是各自在河邊的樹叢中找地方睡著了。第二天日上三竿時,a,第乙個醒來,他將魚平分為5份,把多餘的一條扔回河中,然後拿著自己的乙份回家去了 b第二個醒來,但不知道a已經拿走了乙份魚,於是他將剩下的魚平分為5份,扔掉多餘的乙份,然後...