0

Дан массив. Найти самую длинную последовательность подряд идущих элементов массива =0, посчитать их количество, узнать индекс первого 0 в этой последовательности.

Напр.: 9 10 8 0 0 3 5 6 0 0 0 1 3 ответом будет 3 и 9 (элемент).

Что я делаю не так?

Считает только количество первой последовательности нулей. К тому же я решила сначала разобраться с нахождением верной последовательности, поэтому пока не считала индекс:

    public static void main(String[] args)          
    {   int s=0;//счетчик сколько нулей подряд
        int k=0;//количество нулей подряд
        int x[] = {2, 2, 0, 0, 0, 5, 1,  0, 0, 0, 0} ;
         k=s;
        {s=0;

            for( int i=0; i<x.length; i++)

               if(x[i]==0)
                s=s+1;
                else
                    if(s>k)
                        k=s;
        System.out.print(k);
        }
    }
}
8
  • 4
    Новичок, приложите больше собственных усилий к решению этой простой задачи
    – a_gura
    22 окт 2014 в 16:53
  • 1
    Нельзя быть таким жестоким)
    – liliya
    22 окт 2014 в 16:56
  • 1
    Это жестокая реальность.
    – a_gura
    23 окт 2014 в 13:44
  • 1
    @liliya Вот если бы ты прислала фотографию, тогда возможно товарищи задроты были бы менее жестоки) 23 окт 2014 в 15:10
  • 1
    @liliya: Вот видите! Значит, мы всё правильно сделали.
    – VladD
    23 окт 2014 в 16:33

3 ответа 3

2

@liliya, внутри if (x[i] == 0) { ... Вам нужен цикл, который считает идущие подряд нули (и одновременно меняет i), ну а потом анализ его параметров и запоминание максимума вместе с его начальным индексом.

1

В цикле перебора массива, если встречаешь нуль, открываешь еще один цикл и считаешь, сколько раз подряд он встречается. Потом, когда следующее число не нуль, меняешь указатель внешнего цикла (чтобы не идти уже по пройденным нулям). При встрече следующего нуля повторяешь операцию с вложенным циклом подсчета нулей. Если нулей на данной итерации больше, чем на предыдущей - перезаписываешь их количество и указатель на начало последовательности, если меньше - идешь дальше.

0
    public static void main(String[] args) {

    int input[] = { 9, 10, 8, 0, 0, 3, 5, 6, 0, 0, 0, 1, 3 };

// StringBuilder понадобится для сбора из исходного массива
// элементов, чтобы затем превратить их в String        
    StringBuilder stringInput = new StringBuilder();

// а этот чтобы собрать наибольшую последовательность нолей 
    StringBuilder zeroes = new StringBuilder();

//сюда будем сохранять текущую длину последовательности нолей
    int length = 0;

//а сюда наибольшую длину
    int maxLength = 0;

    for (int i = 0; i < input.length; i++) {
//двигаемся по массиву, собиреам элементы в StringBuilder
        stringInput = stringInput.append(input[i]);

//когда встечаем 0, считаем последовательность нолей
        if (input[i] == 0) {
            length++;
        }

//когда встречаем не 0, сбрасываем значение счетчика нолей      
        if (input[i] != 0) {
            length = 0;
        }

//сравниваем и сохраняем наибольшеее из значений счетчика нолей
        maxLength = Math.max(maxLength, length);
    }

//собираем наибольшую последовательность нолей в StringBuilder
    for (int i = 0; i < maxLength; i++) {                       
        zeroes = zeroes.append("0");
    }

//превращаем StringBuilder'ы в String'и
    String numbers = stringInput.toString();
    String zeroComb = zeroes.toString();

//выводим рамер наибольшей последовательности, 
//используем метод indexOf, чтобы вывести индекс наибольшей
    System.out.println(maxLength + " " + numbers.indexOf(zeroComb));

}

2
  • 1
    Это, возможно, очень хороший код. Но плохой ответ. Объясните, пожалуйста, своими словами, что именно Вы написали и почему. 12 мая 2019 в 5:36
  • @SergeyNudnov это, возможно, очень хороший шаблонный комментарий (это не сарказм мне очень понравилось) 12 мая 2019 в 7:31

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.