[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
Цікавий математичний трюк, який на перший погляд може здатися складним, але насправді це не так!
Послідовність дій така:
- Вам потрібно вгадати будь-яке число від 0 до 100.
- Перед вами з’являється ціле число, видане програмою і відповідне інтервалу.
- Необхідно вказати: запропоноване число більше, менше або дорівнює загаданому вами.
- Якщо програма вгадала неправильно, вона продовжить пропонувати числа.
- Менш ніж за 7 спроб програма все одно згенерує потрібне число.
Щоб отримати відповідь, достатньо скористатися алгоритмом бінарного пошуку. Це означає, що для знаходження потрібного числа діапазон, що залишився, необхідно щоразу ділити на 2. Таким чином, ми зменшуємо обсяг пошуку щоразу, коли виконується дія. Ось і все – правильну відповідь завжди буде знайдено.
Розглянемо приклад у самому коді C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
static void Main() { Console.WriteLine("Загадайте число от 1 до 100 и я отгадаю его, меньше чем за 7 попыток."); int n = int.Parse(Console.ReadLine()); if (n > 0 && n < 100) { int count = BinarySearch(n); Console.WriteLine($"Число угадано за {count} попыток."); } else { Console.WriteLine("Загадайте число от 1 до 100!"); } } static int BinarySearch(int searchedValue, int first = 0, int last = 100, int count = 0) { var middle = (first + last) / 2; Console.WriteLine($"Попытка {++count}, полученное число: {middle}"); if (middle == searchedValue) { return count; } else { return middle > searchedValue ? BinarySearch(searchedValue, first, middle - 1, count) : BinarySearch(searchedValue, middle + 1, last, count); } } |