問題描述
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份,結果發現多乙個椰子,順手就給了幸運的猴子,然後又悄悄的藏了乙...