水手分椰子

2021-10-14 04:16:32 字數 2909 閱讀 7715

問題描述

5個水手來到乙個島上,採了一堆椰子後,因為疲勞都睡著了。一段時間後,第乙個水手醒來,悄悄地將椰子等分成5份,多出乙個椰子,便給了旁邊的猴子,然後自己藏起乙份,再將剩下的椰子重新合在一起,繼續睡覺。不久,第二名水手醒來,同樣將椰子等分成5份,恰好也多出乙個,也給了猴子。然後自己也藏了乙份,再將剩下的椰子重新合在一起。以後每個水手都如此分了一次並藏了乙份,也恰好都把多出的乙個給了猴子。第二天,5個水手醒來,發現椰子少了許多,心照不宣,便把剩下的椰子分成了5份,恰好又多出乙個,給了猴子。

問原來這堆椰子至少有多少個?

遞推設計

設定 y

yy 陣列, 第 i

ii 個水手藏椰子數為 y(i

)(i=

1,2,

...,

5)

y(i) (i = 1,2 ,..., 5)

y(i)(i

=1,2

,...

,5) ,第二天5個水手醒來後各分得椰子為 y(6

)y(6)

y(6)

個, 依照題意, 設椰子總數為 x

xx ,則 x=5

y(1)

+1

x = 5 y(1) + 1

x=5y(1

)+1相鄰兩人所藏椰子數 y(i

)y(i)

y(i)

與 y(i+

1)

y(i+1)

y(i+1)

之間的關係為

4 y(

i)=5

y(i+

1)+1

y(i+

1)=(

4y(i

)−1)

/5

4y(i) = 5y(i+1) +1 \\ y(i+1) = (4y(i)-1)/5

4y(i)=

5y(i

+1)+

1y(i

+1)=

(4y(

i)−1

)/5邊界條件: y(i

)均為整

數y(i) 均為整數

y(i)均為

整數程式源**

#include

#include

intmain()

} x =

5*y[1]

+1;printf

("5個水手分椰子,原有椰子至少有:%.0f個\n"

,x);

return0;

}

演算法改進

前面使用從前往後遞推,從大推小,次數較多。從後往前推,從小推大,可以精簡遞推的次數。

遞推式:

y (i

)=(5

y(i+

1)+1

)/

4y(i) = (5y(i+1)+1)/4

y(i)=(

5y(i

+1)+

1)/4

k取值的改進:為了確保從後往前推出的數是乙個整數,初始值應該為 3,每次k=k+4來保證所推出的數都是整數

改進後程式源**

#include

#include

intmain()

} x =

5*y[1]

+1;printf

("原有椰子數至少為:%0.0f\n"

,x);

return0;

}

問題描述

n

nn 個水手來到乙個島上,採了一堆椰子後,因為疲勞都睡著了。一段時間後,第乙個水手醒來,悄悄地將椰子等分成 n

nn 份,多出 m

mm 個椰子,便給了旁邊的猴子,然後自己藏起乙份,再將剩下的椰子重新合在一起,繼續睡覺。不久,第二名水手醒來,同樣將椰子等分成 n

nn 份,恰好也多出 m

mm 個,也給了猴子。然後自己也藏了乙份,再將剩下的椰子重新合在一起。以後每個水手都如此分了一次並藏了乙份,也恰好都把多出的 m

mm 個給了猴子。第二天,n

nn 個水手醒來,發現椰子少了許多,心照不宣,便把剩下的椰子分成了 n

nn 份,恰好又多出 m

mm 個,給了猴子。

問原來這堆椰子至少有多少個?0

<

m<

n<90

0<

m<

n<9

遞推遞推關係式:

y (i

)=(n

y(i+

1)+m

)/(n

−1

)y(i) = (n y(i+1)+m)/(n-1)

y(i)=(

ny(i

+1)+

m)/(

n−1)

k值取值:初始值為 k=n

−m−1

k=n-m-1

k=n−m−

1 , 每次 k=k

+n−1

k = k+n-1

k=k+n−

1 遞增

程式源**

#include

#include

intmain()

} x = n*y[1]

+ m;

printf

("原有椰子至少為:%.0f\n"

,x);

for(i=

1;i<=n;i++

)printf

("最後一起分時的椰子數:");

printf

("%0.0f = %d * %0.0f + %d \n"

,n*y[n+1]

+m,n,y[n+1]

,m);

printf

("每人分 %0.0f 個\n"

,y[n+1]

);return0;

}

水手分椰子問題

五個水手來到乙個島上,採了一堆椰子後,因為疲勞都睡著了。一段時間後,第乙個水手醒來,悄悄地將椰子等分成五份,多出乙個椰子,便給了旁邊的猴子,然後自己藏起乙份,再將剩下的椰子重新合在一起,繼續睡覺。不久,第二名水手醒來,同樣將椰子了等分成五份,恰好也多出乙個,也給了猴子。然而自己也藏起乙份,再將剩下的...

zstu 4014 水手分椰子 數學推導)

time limit 5 sec memory limit 64 mb submit 1827 solved 524 n個水手來到乙個島上,採了一堆椰子後,因為疲勞都睡著了。一段時間後,第乙個水手醒來,悄悄地將椰子等分成n份,多出乙個椰子,便給了旁邊的猴子,然後自己藏起乙份,再將剩下的椰子重新合在一...

Perl關於分椰子的趣味問題

話說某天一艘海盜船被天下砸下來的一頭牛給擊中了,5個倒霉的傢伙只好逃難到乙個孤島,發現島上孤零零的,幸好有有棵椰子樹,還有乙隻猴子 大家把椰子全部採摘下來放在一起,但是天已經很晚了,所以就睡覺先晚上某個傢伙悄悄的起床,悄悄的將椰子分成5份,結果發現多乙個椰子,順手就給了幸運的猴子,然後又悄悄的藏了乙...