26.12.2011, 23:43 | #1 (permalink) |
Новичок
Регистрация: 25.12.2011
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Задача на перебор состояний
"обезьяна и банан". Имеется комната, в которой в произвольном месте находиться ящик и также в произвольном месте на потолке висит банан. Обезьяна может ходить по комнате, двигать(или не двигать) ящик, залезать( или не залезать) на ящик ( если он рядом). Требуется найти решение - обезьяна на ящике, достала банан, и схватила его. помогите прошу очень=( |
26.12.2011, 23:43 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Данные топики очень похожи по содержанию на вашу тему Задача на C# Задача по С + + Задача по С++ |
27.12.2011, 09:44 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
М-да... Боюсь, что выйдет "а иначе...". Ни языка программирования, ни толком сформулированных условий... Здесь что, графика нужна? В чем, собственно, состоит решение? Как перемещается обезьяна - по неким клеткам в системе X-Y или еще как? Каков шаг? Перемещения задаются с клавиатуры? В общем, ничего не понятно.
Сочувствую. |
27.12.2011, 10:02 | #3 (permalink) |
Banned
Регистрация: 12.12.2011
Сообщений: 361
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 658
|
Алгоритм аналогичный задачи "пятнашке" (все помнят ручную игру на передвижение цифр с одной пустой клеткой).
Состояний как я понял-три-Обезьяна стоит на полу-обезьяна двигает ящик-обезьяна стоит на ящике. В координатах Х...Y...-висит банан. В координатах Х...Y...-стоит ящик. В координатах X...Y..-исходная позиция обезьяны. Это получается условие. Координаты можно задать любые. Алгоритм решения. 1.Методом прохождения клеток cовместить ящик с обезьяной. if-else false-true проходить все клетки до нахождения ящика. 2.Встать на него Банан есть-нет??? если есть-двигать на клетку вперед.Снова встать на него. И так по всем клеткам до нахождения банана. |
27.12.2011, 15:28 | #5 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
"Досрочный" выход из программы - клавишей "Esc". Код:
USES CRT; CONST N=10; VAR Xm,Ym,Xb,Yb,Xf,Yf,i,j:Byte; Ch:Char; S:String; b,b1,f:Boolean; PROCEDURE Test_Box(Xt,Yt:Byte; var bt:boolean); Begin bt:=false; If (Xt=Xb) and (Yt=Yb) then begin bt:=true; gotoXY(1,N*2+2); Write('Monkey found the box!'); gotoXY(Xt,Yt); S:='MB'; end; End; PROCEDURE Test_Fruit(Xt,Yt:Byte; var bf:boolean); Begin bf:=false; If (Xt=Xf) and (Yt=Yf) then begin bf:=true; gotoXY(1,N*2+3); Writeln('Monkey got its fruit!'); Write('Press "Enter" to exit'); gotoXY(Xt,Yt); S:='MBF'; end; End; BEGIN Randomize; ClrScr; For i:=1 to N+1 do begin For j:=1 to N do Write('|---'); Writeln('|'); If i<=N then begin For j:=1 to N do Write('| '); Writeln('|'); end; end; Xb:=Random(N)*4+2; Yb:=Random(N)*2+2; Repeat Xf:=Random(N)*4+2; Yf:=Random(N)*2+2; Until Not((Xf=Xb) and (Yf=Yb)); Repeat Xm:=Random(N)*4+2; Ym:=Random(N)*2+2; Until Not((Xm=Xb) and (Ym=Yb)) and Not((Xm=Xf) and (Ym=Yf)); GotoXY(Xm,Ym); Write('M'); b:=false; f:=false; S:='M'; Repeat Ch:=ReadKey; If (Ch=#72) and (Ym>2) then begin GotoXY(Xm,Ym); Write(' '); Ym:=Ym-2; GotoXY(Xm,Ym); If not(b) then begin Test_Box(Xm,Ym,b1); If b1 then b:=true; end; If b then begin Test_Fruit(Xm,Ym,b1); If b1 then f:=true; end; Write(S); end; If (Ch=#75) and (Xm>2) then begin GotoXY(Xm,Ym); Write(' '); Xm:=Xm-4; GotoXY(Xm,Ym); If not(b) then begin Test_Box(Xm,Ym,b1); If b1 then b:=true; end; If b then begin Test_Fruit(Xm,Ym,b1); If b1 then f:=true; end; Write(S); end; If (Ch=#77) and (Xm<4*N-2) then begin GotoXY(Xm,Ym); Write(' '); Xm:=Xm+4; GotoXY(Xm,Ym); If not(b) then begin Test_Box(Xm,Ym,b1); If b1 then b:=true; end; If b then begin Test_Fruit(Xm,Ym,b1); If b1 then f:=true; end; Write(S); end; If (Ch=#80) and (Ym<2*N) then begin GotoXY(Xm,Ym); Write(' '); Ym:=Ym+2; GotoXY(Xm,Ym); If not(b) then begin Test_Box(Xm,Ym,b1); If b1 then b:=true; end; If b then begin Test_Fruit(Xm,Ym,b1); If b1 then f:=true; end; Write(S); end; If Ch=#27 then Halt(0); Until f; Readln; END. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
27.12.2011, 19:27 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|