2024-06-26 09:06来源:未知作者:admin
问题
老虎、狮子、豹子分别带着自己的孩子(各一只)准备过一条河,河上只有一条船,船上每次只能载两只动物。大老虎、大狮子、大豹子和小狮子会划船。当各自的家长不在身边却有别的孩子的家长时,孩子就会被吃掉。那么请你想一想,如何才能让这六只动物安全过河?
答案设它们为A、B、C、a、b、c。其中A、B、C、a会划船。
①ab过河,a回来;
②ac过河,a回来;
③BC过河,Bb回来;(这样对岸就只有Cc了)
④Aa过河,Cc回来;(这样对岸就只有Aa了)
⑤BC过河,a回来;(这样对岸是ABC,原岸是abc了!)
⑥ab过河,a回来;
⑦ac过河
A表示狼,B表示羊,C表示白菜!D为船夫,E为船!
第一步,BDE过河,到对岸留下B,DE返回对岸
第二步,ADE过河,到对岸留下A,BDE返回对岸,留下B。
第三步,CDE过河,到对岸留下C,返回对岸DE载取B
第四步,BDE过河,完毕!
卒子过河——勇往直前
卒子过河——难以回头
卒子过河——永不回头
卒子过河——有进无退
卒子过河--顶大车
卒子过河--横竖都行
const
a:array[1..2]of byte=(0,1);ma1:array[1..8]of longint=(1,2,2,1,-1,-2,-2,-1);
b:array[1..2]of byte=(1,0);ma2:array[1..8]of longint=(2,1,-1,-2,-2,-1,1,2);
var
c:array[0..50,0..50]of int64;
d,i,j,l,m,n,k,o,p,q,x,y:longint;
begin
read(n,m,x,y);
fillchar(c,sizeof(c),0);
c[x,y]:=-1;
c[n+1,m]:=1;
for i:=1 to 8 do c[x+ma1[i],y+ma2[i]]:=-1;
for i:=n downto 0 do
for j:=m downto 0 do
if c[i,j]<>-1 then
c[i,j]:=c[i+1,j]+c[i,j+1]
else c[i,j]:=0;
write(c[0,0]);
end.
采用简单递推可得其规律,即(x,y)的可能性=(x-1,y)+(x,y-1)的可能性。注意数据可能达14位以上,所以应用int64或qword或extended(需注意小数)。
没问题请采纳,有问题请追问。
#include int main() { int n, t; scanf(%d,&n); if(n%5) t=n/5+1; else t=n/5; printf(需要%d次\n, t); return 0; }
1.小狮子从B岸划船到A岸 2.小狮子载着小老虎从A岸划船到B岸 3.小狮子再从B到A,接小豹子从A岸划船到B岸(可怜的小狮子) 4.小狮子再次从B划到A岸,然后把船交给大老虎,大豹子,让它们从A岸到B岸 5.大老虎,大豹子到B岸后,留下一个(就让大豹子留下吧,大老虎再辛苦下),大老虎带上儿子小老虎划船从B岸到A 6.大老虎把小老虎留在A岸,接大狮子从A到B 7.让B岸的小豹子把船从B划到A,分2次把在A岸的小老虎,小狮子接到B岸~~~6只动物全部到B岸了