Обнаружен недостижимый код в программе - C#

Узнай цену своей работы

Формулировка задачи:

Сегодня услышал интересную задачу от друга, решил попробовать его реализовать. Суть задачи в следующем: В небольшом отеле 10 комнат. Каждого из пришедших заселяют в случайно выбранную комнату. Если в случайно выбранной комнате уже есть постоялец, всех постояльцев выгоняют из отеля. Вопрос: Сколько итераций понадобится чтобы все 10 комнат были заполнены лишь одним постояльцем в каждой комнате? Решение делал следующим образом: Сделать рандомный генератор; Зачислять +1 в выбранную рандомную комнату; Делать проверку после каждого зачисления; Если после проверки в комнате более 1 человека, то: - итерацию прекратить; - итерация +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();
Проблема вылезла в проверке номеров на наличие постояльцев (т.е. чисел больше единицы в массиве). В коде это 14 строка. Ошибка под названием "Обнаружен недостижимый код". Когда я просматривал программу с помощью точки остановы, то заметил, что программа попросту пропускала цикл. В результате программа зацикливается и сбрасывает все данные массива лишь при A[0]>1. Как можно исправить программу, чтобы она целиком просматривала цикл, а не проходила сквозь него?

Решение задачи: «Обнаружен недостижимый код в программе»

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();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5
Похожие ответы