Обнаружен недостижимый код в программе - C#
Формулировка задачи:
Сегодня услышал интересную задачу от друга, решил попробовать его реализовать.
Суть задачи в следующем:
В небольшом отеле 10 комнат. Каждого из пришедших заселяют в случайно выбранную комнату.
Если в случайно выбранной комнате уже есть постоялец, всех постояльцев выгоняют из отеля.
Вопрос:
Сколько итераций понадобится чтобы все 10 комнат были заполнены лишь одним постояльцем в каждой комнате?
Решение делал следующим образом:
Сделать рандомный генератор;
Зачислять +1 в выбранную рандомную комнату;
Делать проверку после каждого зачисления;
Если после проверки в комнате более 1 человека, то:
- итерацию прекратить;
- итерация +1;
- вывести, в какой комнате более одного человека;
- начать заново;
В обратном случае закончить программу, и вывести номер итерации.
Исходный код консольной программы выглядит так:
Проблема вылезла в проверке номеров на наличие постояльцев (т.е. чисел больше единицы в массиве). В коде это 14 строка. Ошибка под названием "Обнаружен недостижимый код". Когда я просматривал программу с помощью точки остановы, то заметил, что программа попросту пропускала цикл. В результате программа зацикливается и сбрасывает все данные массива лишь при A[0]>1.
Как можно исправить программу, чтобы она целиком просматривала цикл, а не проходила сквозь него?
Random R = new Random(); int i, b, n = 1, d = 0; int[] A = new int[10]; link0: for (i = 0; i < 10; i++) A[i] = 0; link2: d = 0; b = R.Next(0,9); A[b]++; for (i = 0; i < 10; i++) { if (A[i] > 1) { Console.WriteLine("Iteration number {0}", n); Console.WriteLine("Ended up with 2 people in room #{0}", i+1); n++; goto link0; } else if (A[i] == 1) { d++; if (d == 10) goto link1; } goto link2; } link1: Console.WriteLine("Iteration number {0} ended up with 1 people in each room!", n); Console.ReadLine();
Решение задачи: «Обнаружен недостижимый код в программе»
textual
Листинг программы
Random R = new Random(); int i, b, n = 1, d = 0; int[] A = new int[10]; link0: for (i = 0; i < 10; i++) A[i] = 0; link2: d = 0; b = R.Next(0,10); // ДО 10 A[b]++; for (i = 0; i < 10; i++) { if (A[i] > 1) { Console.WriteLine("Iteration number {0}", n); Console.WriteLine("Ended up with 2 people in room #{0}", i+1); n++; goto link0; } else if (A[i] == 1) { d++; if (d == 10) goto link1; } } goto link2; // ПОСЛЕ ПРОВЕРКИ ВСЕХ КОМНАТ link1: Console.WriteLine("Iteration number {0} ended up with 1 people in each room!", n); Console.ReadLine();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д