利用Python C語言解決分魚問題

2021-08-03 08:02:22 字數 1805 閱讀 9246

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份,扔掉多餘的乙份,然後...