Индекс находился вне границ массива и 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();
}
}
}