Дан массив, например, состоящий только из 0 и 1. Определить самое большое количество подряд идущих единиц и вывести на экран индексы начала и конца этого диапазона.
const n = 50; var arr: array[1..n] of byte; i,count,max_count,max_id: byte; begin randomize; for i:=1 to n do begin // заполнение и вывод массива arr[i] := random(2); // диапазон [0;1] write(arr[i]:2); if i mod 10 = 0 then writeln; // переход после каждого 10-го на новую строку end; count := 0; // счетчик текущего количества максимумов max_count := 0; // запоминание самого большого количества максимумов max_id := 0; // индекс первого элемента в самой длинной последовательности максимумов for i:=1 to n do begin if arr[i] = 1 then count := count + 1 else begin if count > max_count then begin max_count := count; max_id := i - count; end; count := 0 end; end; writeln('[',max_id,';',max_id+max_count-1,']'); end.
Пример выполнения кода:
1 0 0 0 1 1 0 1 1 1 0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 0 0 0 1 0 1 1 1 1 1 0 1 0 0 1 1 1 1 1 0 0 0 0 [33;37]
Комментарии
Код работает не для всех
Код работает не для всех случаев. Попробуйте его использовать, если вместо последних 4-х нулей в Вашем примере будут единицы... А если весь массив будет из единиц? ;-)
Да. Не обработан случай,
Да. Не обработан случай, когда массив заканчивается не нулем. Надо после цикла сделать дополнительную проверку.
I need help!!!!
Добрые люди, помогите, пожалуйста, решить 5 задач на языке высокого уровня Pascal(Turbo Pascal).
Меня даже чайником трудно назвать)) Учусь на заочном на факультете менеджмента.. к субботе нужно принести готовые решения задач.
Задание 1. Написать программу в которой вводятся два операнда Х и Y и знак операции (+,–,/,*). Вычислить результат Z в зависимости от знака. Предусмотреть реакции на возможный неверный знак операции, а также на ввод Y=0 при делении. Организовать возможность многократных вычислений без перезагрузки программа (т.е. построить цикл). В качестве символа прекращения вычислений принять ‘0’.
Задание 2. Вычислить функции Y=X2+Z для 0≤X≤4 с шагом 1 и 1≤Z≤10 с шагом 2.
Задание 3. Написать программу формирования числа (до 1000 руб.) в сумму прописью (например, 103=‘сто три рубля’).
Задание 4. Написать программу, которая из заданной даты (в диапазоне 1900..2100) формирует следующую. Исходная дата задается в форме текстовой строки вида ‘дд.мм.гггг’, например ’06.04.2002’. Подсказка: признаком високосного года является кратность года числу 4. Исключением являются года с двумя нулями на конце, число сотен в которых не кратно 4 (например 1800, 1900, 2100).
Задание 5. Запрограммировать процесс выбора в детской считалке. Пусть нужно выбрать случайным образом дежурного из группы в M человек. Дети становятся в круг и “считаются” по следующему правилу. Из круга по часовой стрелке удаляется каждый третий (шаг выбора N) участник, начиная с номера 1. В конце останется только один – дежурный. Для (см. рисунок) примера M=8, N=3. Тогда последовательно из круга выйдут номера 1,4,7,3,8,6. Наконец останутся только номера 2 и 5 и счет продолжается уже между ними 2→5→2. Таким образом, “повезло” номеру 5. Задания решить способом, указанным ниже.
Алгоритм 1.Создается массив Х длиной в несколько раз больше чем M. Обозначим его размерность MM (в программе задайте ММ=30). Первые его M элементов заполняются последовательными числами от 1 до M. Остальные элементы от M+1 до MM остаются пока пустыми (=0). Строится FOR-цикл перебора всех элементов X. В нем, если номер элемента I минус 1 кратен N, этот номер (он подчеркнут) печатается и человек выбывает. Если нет, элемент переносится в правый конец занятой части массива Х (в первую свободную клетку). Если встретился элемент =0, значит произошла обработка всех чисел и процесс прекращается. На рисунке показана динамика изменения массива Х. Первоначально в нем заняты только клетки с 1 по 8. Цифры 1,4,7 печатаются, а остальное (2,3,5,6,8) последовательно переносится в свободную область Х, из которой печатаются цифры 3 и 8 и т.д. пока не будут выведены все цифры. После 22-ой ячейки остаются еще MM-22 пустых клеток. Их просматривать не нужно и для этого в цикле должен быть предусмотрен выход при X[i]=0.
Х 1 2 3 4 5 6 7 8 2 3 5 6 8 2 5 6 2 5 2 5 5 5 дальше нули
1 4 7 3 8 6 2 5 выбывание
i: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Заранее благодарна.
вторая
задача 1
задача 1
Описания поименованного типа
Написать программу на языке Паскаль , которая состоит из следующих действий :
1 . Описания поименованного типа , который состоит из трех компонент согласно варианту ( табл. 15 ) .
2 . Описания переменной индексированного типа ( одномерный массив) из 7 элементов , принадлежащих поименованном типа.
3 . Описания перечислювального типа согласно варианту ( табл. 15 ) .
4 . Описания и инициирования переменных индексированного типа целых , действительных , символьных или логических значений в зависимости от варианта ( табл. 15 ) .
5 . Инициирование элементов переменной , описанной в п.2 данной задачи , используя переменные, описанные в п.4 данной задачи , и значение перечислювального типа п.3 .
6 . Обработки одномерного массива согласно варианту ( табл. 15 ) .
Табл.15
Состав поименованного типа данных:
1-я компонента Имя - значение перечислений типа;
2-я компонента: Средний балл - Вещественные значения;
3-я компонента: Курс - целое значение
Вычислить:
Процент студентов-отличников 1-го курса