Обнаружен недостижимый код в программе - 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();