Das ganze tschechische Volk ist eine Simulantenbande! Otázka však je, jestli to platí i pro použití simulačních metod v Excelu.
Jestli vyřešíte tenhle problém, umíte opravdu dobře pracovat s Excelem.
Jestli vyřešíte tenhle problém, umíte opravdu dobře pracovat s Excelem.
Upozorňuji, že řešení může mít více variant - já uvedu řešení jen jedné z nich.
Úkol jde nepochybně řešit i pomocí maker, není to ale nutné.
Úkol jde nepochybně řešit i pomocí maker, není to ale nutné.
Zadání
Máme bazén, který má 10 krát 10 metrů. Má i nějakou hloubku, ale tu zanedbáme. Do bazénu pustíme rybičku a žraloka, kteří se v něm budou pohybovat. Když se žralok potká s rybičkou, sežere jí. V takovém případě dáme do bazénu hned další rybičku.
Otázka je, kolik rybiček budeme muset do bazénu doplnit za 100 000 sekund? Jinými slovy, kolikrát se žralok s rybičkou potká?
Protože se v úkolu pracuje s náhodnými čísly, budou se řešení pokaždé trochu lišit. Neměla by se ale lišit řádově.
Platí, že:
Rybička i žralok se pohybují rychlostí jednoho metru za sekundu. Pohybují se (pro zjednodušení) v pravých úhlech - tedy doleva, doprava, dopředu, dozadu.
Rybička i žralok se pohybují naprosto náhodně. V jednom směru se mohou pohnout doleva, doprava nebo zůstat na místě (se stejnou pravděpodobností všech tří pohybů) a současně se mohou v druhém směru pohnout dopředu, dozadu nebo zůstat na místě (se stejnou pravděpodobností všech pohybů). Takže např. ze souřadnic (0,0) se mohou pohnout na (-1,1), (-1,0), (0,1) atd., ale nemohou se pohnout na (0,-2).
Kdyby se chtěla rybička nebo žralok dostat za hranici bazénu, zůstane na místě a v příští sekundě se bude rozhodovat znova. Jsou tedy možné pouze pohyby, které nevedou za hranici bazénu.
Tak hodně štěstí při řešení.
Další hádanky si můžete vyzkoušet tady.
Další hádanky si můžete vyzkoušet tady.
Hazet rybicku zralokovi k tlame mi neprislo moc ferove :)
OdpovědětVymazatDiky za ty opravy. Bude se mi to hodit.
Mně to nefér nepřijde, minimálně z pohledu žraloka... :)
OdpovědětVymazatChtěl jsem si trochu procvičit VBA a zplodil jsem tohle - funguje to, ale nejspíš by se to dalo napsat nějak elegantněji...
OdpovědětVymazatSub zralok()
Dim hrana As Integer
hrana = Application.InputBox("zadejte, v jak velkém bazénu rybička a žralok plavou", "šířka bazénu")
sirka_zraloka = Round(Rnd() * hrana)
vyska_zraloka = Round(Rnd() * hrana)
sirka_rybicky = Round(Rnd() * hrana)
vyska_rybicky = Round(Rnd() * hrana)
Do Until a = 100000
a = a + 1
posun_sirky_zraloka = Round(Rnd() * 2) - 1
posun_sirky_rybicky = Round(Rnd() * 2) - 1
posun_vysky_zraloka = Round(Rnd() * 2) - 1
posun_vysky_rybicky = Round(Rnd() * 2) - 1
If (sirka_zraloka + posun_sirky_zraloka > 0 And sirka_zraloka + posun_sirky_zraloka < hrana) Then sirka_zraloka = sirka_zraloka + posun_sirky_zraloka
If (sirka_rybicky + posun_sirky_rybicky > 0 And sirka_rybicky + posun_sirky_rybicky < hrana) Then sirka_rybicky = sirka_rybicky + posun_sirky_rybicky
If (vyska_zraloka + posun_vysky_zraloka > 0 And vyska_zraloka + posun_vysky_zraloka < hrana) Then vyska_zraloka = vyska_zraloka + posun_vysky_zraloka
If (vyska_rybicky + posun_vysky_rybicky > 0 And vyska_rybicky + posun_vysky_rybicky < hrana) Then vyska_rybicky = vyska_rybicky + posun_vysky_rybicky
List1.Cells(sirka_zraloka, vyska_zraloka).Select
With Selection.Interior
.Color = RGB(0, 100, 0)
End With
List1.Cells(sirka_rybicky, vyska_rybicky).Select
With Selection.Interior
.Color = RGB(100, 0, 0)
End With
If (sirka_rybicky = sirka_zraloka And vyska_rybicky = vyska_zraloka) Then pocet_sezrani = pocet_sezrani + 1
Loop
MsgBox (pocet_sezrani)
End Sub