|
Тема |
Re: Бикове и крави ... [re: Ивaн] |
|
Автор |
Didimus (непознат) |
|
Публикувано | 17.01.07 12:16 |
|
|
Навремето писах подобно нещо на JavaScript като учех езика.
Всичко, което ти трябва е един масив, в който да съхраняваш какво си питал досега и какви отговори си получил, нищо друго.
1. Питаш за 0123 (моя вариант позволяваше начало с нула и не позволяваше повторение на цифрите.
2. Добавяш числото и отговорите към масива
3. Ако имаш 4 бика то край
4. Търсиш следващото валидно число (в моя вариант 1123 не е валидно) след последното, за което си питал и което ще даде същите отговори ако го сравниш с всички досегашни опити от масива.
5. Ако подминеш 9999 значи потребителят е лъгал
6. Питаш за новото число и отиваш на стъпка 2
В моя вариант с водещи нули максимума на опити е 7. Без тях максимума би трябвало да е 6.
Да се пази списък на всички възможни комбинации е напълно безсмислено. Те са равновероятни, а за следващия опит ти трябва само една, и след като няма значение коя, то аз търся тази с най-малък номер.
Недостатък на този алгоритъм е че като знаеш как се познава, то можеш да подбереш такова число че да доведеш до максимален брой опити.
Но за това си има много лесно решение: правиш в началото една случайна подредба на цифрите от 0 до 9 и всеки път като извеждаш на екрана заменяш твоите цифри с цифра от съответната позиция (напр. 2 с втората цифра). В този случай гадаенето на програмата ще изглежда напълно случайно.
|
| |
|
|
|