OK, muszę zrobić grę NIM i spróbować znaleźć strategię zawsze wygrać z następującym gry NIM:Nim gra pytanie
21 meczów, odtwarzacz 1 i 2 każdy ma 1, 2, 3, 4 lub 5 dopasowań w każdej turze i nie można przyjąć takiej samej liczby dopasowań, jaką mają poprzedni gracz. Th eplayer wygrywa, jeśli/kiedy podejmie ostatni mecz.
Muszę coś w tym celu zaprogramować, ale nawet nie rozumiem, żeby zacząć. Jak mogę znaleźć zwycięską strategię w tego typu grze nim?
EDIT:
więc pomyślałem, że zawsze wygrać, kiedy dojdziesz do 7 meczach nadal w środku. Druga może zająć 2-5, a ostatnia może dodać do 7. kiedy drugi bierze 1, bierzesz 3 (drugi też nie może wziąć 3) i musisz wybrać 1 lub 2, w takim przypadku otrzymasz pierwszą i wygrasz.
jednak będzie od 21 do 7 jest zagadką dla mnie nie mogę dowiedzieć się, jak można być zawsze osoba dotarcie do 7.
EDIT 2: ok więc bez zasady, że nie można brać taki sam jak poprzedni gracz, wydaje mi się, że jest całkiem prosty.
Zrobiłbyś k = 5 + 1 = 6. to powinieneś wykonać pierwszy ruch tak, aby mecze pozostały wtedy% 6 = 0. Więc w tym przypadku weź 3 pierwsze, a następnie wypełnij ruch inny gracz do 6. Jednak w tym przypadku to nie zadziała, ponieważ drugi gracz może zająć 3, po których nie można zająć 3, aby wypełnić do 6. Więc jest mój problem. Jakieś pomysły?
Edit3:
ok, więc można powiedzieć mogę zmusić 7 meczów. Jednak przypuśćmy, że biorę to samo myślenie na krok 14-7 dopasowań. (wtedy jest kolej drugiej)
są wtedy dwa scenariusze: 1: bierze 2-5, a ja wypełniam go do siedmiu, które pozwalają na 7 i wygrywam. 2: bierze 1, więc pozostało 13. Kiedy weźmiesz 3, jak robię w (7-0) -stepie, to staje się 10. Potem bierze 5 i nie mogę już 5, aby zakończyć, a ja stracę.
Tu leży problem, w którym scenariusz 2 nie stanowi problemu w (7-0) -stepie jest teraz. Jak rozwiązać ten problem?
TAK, rozwiązanie:
btw, na speler 1 oznacza: po Gracz 1 kolej itd (jestem holenderski).
Ok więc próbowałem kilka rzeczy i myślę, że mam rozwiązanie. Musisz wziąć 1 mecz jako pierwszy gracz. Następnie inni faceci mogą wziąć 2-5 meczów. Dopasowujesz (kalambur przeznaczony) jego ilość do 7, więc zawsze będziesz miał (21-1-7 =) 13 meczów w środku. Następnie następuje powrót gracza 2 i istnieją dwa scenariusze: gracz 2 bierze 1,2,4, lub 5 meczów, w takim przypadku bierzesz tyle meczów, ile będzie 7 po lewej. (jak powiedzieliśmy wcześniej, kiedy bierzesz mecze w taki sposób, że 7 pozostało, zawsze wygrasz). Drugi scenariusz polega na tym, że gracz 2 bierze 3 mecze, w którym to przypadku jest 10 w środku, kiedy jest twoja kolej. Nie możesz wziąć 3, aby zrobić 7, ponieważ nie możesz wziąć 2 razy tyle samo. Więc weź 5, pozostało 5. Gracz 2 nie może wziąć 5, aby wygrać i musi wybrać 1-4, po czym możesz wziąć pozostałe i wygrać.
To jest rozwiązanie, jak sądzę.I jakoś przyszedł na nią, bo zauważył to:
Normal Nim grę z modulo etc:
P2 1 2 3 4 5
P1 5 4 3 2 1
------------------
6 6 6 6 6
Ale nie można zrobić 3,3 tu więc liek to:
p2 1 2 3 4 5
p1 5 4 3 2 1
---------------------
7 7 7 7
Tak możesz zrobić 7 za każdym razem, a 1 to specjalny przypadek. Nie wiem dlaczego, ale intuicyjnie zająłem 1 jako punkt wyjścia, ponieważ wydaje się, że trzeba podjąć inicjatywę, aby móc kontrolować ruchy innych. (nie można zrobić dwa razy 1, więc drugi musi wziąć 2-5, co daje ci kontrolę)
W każdym razie, DZIĘKI dużo za całą pomoc. Także dla całego programu, który został napisany. Nie mogłem go użyć, ponieważ nie skompilowałbym się jako brak dobrych umiejętności java :) i chciałem też rozwiązać go samodzielnie.
W każdym razie widziałem, że to wiki, powodzenia dla ludzi w przyszłości próbujących rozwiązać ten problem!
To nie jest dla mnie natychmiastowe pytanie programistyczne. Wyprowadzanie zwycięskiej strategii dla tej gry nie ma nic wspólnego z Javą * *. Chyba że, jak przypuszczam, chciałeś przeprowadzić symulację statystyczną i spróbować opracować strategię z wyników losowych gier. Ale można to wywnioskować logicznie, bez udziału komputerów. –
Powiedziałeś również, że "musisz coś dla tego zaprogramować". Co to jest? Dlaczego ** ma być programem? Jeśli chodzi o zlecenie, prawdopodobnie masz znacznie bardziej szczegółowy brief niż "coś programuj", więc być może sprawdzenie, które poprowadzi cię w prawo. Jeśli to twój osobisty wybór do projektu, obawiam się, że wybrałeś nieodpowiedni projekt. –
Mam tofind rozwiązanie, najlepszą strategię, którą wygrają alwy. I nie mogłem tego rozgryźć po godzinach myślenia i google, więc teraz chcę spróbować zaprogramować coś, co rozwiązuje to w Javie. Jednak jeśli masz jakieś wskazówki, jak go znaleźć lub powód, bez java też byłbym bardzo szczęśliwy! – Javaaaa