Индекс находился вне границ массива и Console.WriteLine () выводит 2 раза (надо 1) - C#

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

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

Доброго времени суток! Запутался. Помогите исправить 2 ошибки! 1) Индекс находился вне границ массива 2) Console.WriteLine () выводит 2 раза (надо 1) Сама программа всё считает правильно!

Условие.

Дана последовательность из m единиц и нулей.Рассмотреть отрезки этой последовательности (подпоследовательности идущих подряд чисел), состоящие из одних нулей.Получить наименьшую из длин рассматриваемых отрезков.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace z4
{
    class Program
    {
        static void Main(string[] args)
        {
            /*zl 7.77. Дана последовательность из m единиц и нулей.Рассмотреть отрезки этой последовательности
             * (подпоследовательности идущих подряд чисел), состоящие из одних нулей.Получить наименьшую из 
             * длин рассматриваемых отрезков. */
            int []a=new int [10]{0,0,0,0,1,0,0,0,0,0};
            int  i,j,k,mn=a.Length,imn;
            Console.Write("Массив: ");
            for (i=0; i<a.Length;i++)
            {
                Console.Write(a[i]+ " ");
            }
            i=1; mn=a.Length; imn=0;
            while(i<=a.Length)
            {
                if (a[i]==a[i-1])
                {
                    j=i;k=1;
                    while(a[j]==a[j-1] && j<=a.Length)
                    {
                        j=j+1;
                        k=k+1;
                    }
                    if(k<mn && k>=2)
                    {
                        mn=k;
                        imn=i-1;
                    }
                    i=i+k;
                }
                else i=i+1;
                if (mn==a.Length)
                {
                    Console.WriteLine("Нет одинаковых рядом!");
                }
                else
               
                   Console.WriteLine("Наименьшая длина отрезка из нулей: "+ mn);
             //   for (i=imn; i<imn+mn-1;i++)
           //     {
           //         Console.WriteLine(a[i]+ " ");
           //     }
            }
            Console.ReadKey();
        }
    }
}

Решение задачи: «Индекс находился вне границ массива и Console.WriteLine () выводит 2 раза (надо 1)»

textual
Листинг программы
using System;
 
namespace z4
{
    class Program
    {
        static void Main()
        {
            int[] a = new[] { 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 };
 
            Console.Write("Массив: ");
            foreach(int item in a)
            {
                Console.Write(item + " ");
            }
 
            int i = 1; 
            int mn = a.Length;
 
            while (i < a.Length)
            {
                if (a[i] == a[i - 1])
                {
                    int j = i; 
                    int k = 1;
 
                    while (j < a.Length && a[j] == a[j - 1])
                    {
                        j++;
                        k++;
                    }
 
                    if (k < mn && k >= 2)
                    {
                        mn = k;
                    }
 
                    i += k;
                }
                else
                {
                    i++;
                }
            }
 
            if (mn == a.Length)
            {
                Console.WriteLine("Нет одинаковых рядом!");
            }
            else
            {
                Console.WriteLine("Наименьшая длина отрезка из нулей: " + mn);
            }
 
            Console.ReadKey();
        }
    }
}

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


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

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

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