0 / 0 / 0 Регистрация: 27.09.2016 Сообщений: 12 |
|
1 |
|
Определить максимальное и минимальное число последовательности27.09.2016, 18:18. Показов 23414. Ответов 7
1. Написать программу, которая определяет максимальное и минимальное число из введенной с клавиатуры последовательности положительных чисел (длина последовательности не ограничена).
0 |
Sifors 7 / 5 / 5 Регистрация: 28.09.2016 Сообщений: 76 |
||||
30.09.2016, 00:13 |
2 |
|||
Так сойдет?
0 |
27 / 19 / 10 Регистрация: 10.02.2016 Сообщений: 236 |
|
30.09.2016, 00:40 |
3 |
Каким образом будет вводиться последовательность?
0 |
0 / 0 / 0 Регистрация: 27.09.2016 Сообщений: 12 |
|
04.10.2016, 09:54 [ТС] |
4 |
Но последовательность не ограничена же. А вы ее ограничили…
0 |
Senid 0 / 0 / 1 Регистрация: 04.10.2016 Сообщений: 4 |
||||
04.10.2016, 10:14 |
5 |
|||
Может так:
0 |
Maxim Prishchepa 1936 / 1048 / 109 Регистрация: 29.03.2010 Сообщений: 3,167 |
||||
04.10.2016, 10:31 |
6 |
|||
тогда уже лучше:
но мне кажется тут достопочтенные преподы хотели бы удивить работу с динамическими массивами и поиск мин. и макс внутри массива…
0 |
4981 / 3088 / 456 Регистрация: 10.11.2010 Сообщений: 11,165 Записей в блоге: 10 |
|
04.10.2016, 11:10 |
7 |
Senid, а зачем переменная
0 |
Senid 0 / 0 / 1 Регистрация: 04.10.2016 Сообщений: 4 |
||||
04.10.2016, 12:35 |
8 |
|||
castaway, чтобы первое считанное число присвоить и min, и max. Но можно и без нее, так даже лучше
Maxim Prishchepa, я не знал этих функций, теперь знаю
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
04.10.2016, 12:35 |
8 |
Это довольно сложная, но очень популярная задача. Давайте решим ее на примере массива:
2 3 -8 -1 2 4 -2 3
Если рассматривать массив как содержащий чередующиеся последовательности положительных и отрицательных чисел, то не имеет смысла рассматривать части положительных или отрицательных субпоследовательностей. Почему? Включая часть отрицательной субпоследовательности, мы уменьшаем итоговое значение суммы, значит, нам не стоит включать часть отрицательной субпоследовательности вообще. Включение части положительной субпоследовательности выглядит еще более странным, поскольку включение этой субпоследовательности целиком всегда даст больший результат.
Нужно придумать алгоритм, рассматривая массив как последовательность отрицательных и положительных чисел, расположенных вперемежку.
Любое число можно представить в виде суммы субпоследовательностей положительных и отрицательных чисел. В нашем примере массив можно сократить до:
5 -9 6 -2 3
Мы еще не получили отличный алгоритм, но теперь лучше понимаем, с чем имеем дело.
Рассмотрим предыдущий массив. Нужно ли учитывать субпоследовательность {5, -9}? В сумме мы получим -4, значит, нет смысла учитывать оба этих числа, достаточно только {5}.
В каких случаях имеет смысл учитывать отрицательные числа? Только если это позволяет нам объединить две положительные субпоследовательности, сумма каждой из которых больше, чем вклад отрицательной величины.
Давайте продвигаться, начиная с первого элемента в массиве.
5 — это самая большая сумма, встретившаяся нам. Таким образом, maxsum = 5 и sum = 5. Затем мы видим следующее число (-9). Если добавить это число к sum, то получится отрицательная величина. Нет смысла расширять субпоследовательность с 5 до -9 (-9 уменьшает общую сумму до 4). Таким образом, мы просто сбрасываем значение sum.
Теперь мы дошли до следующего элемента (6). Эта субпоследовательность больше, чем 5, таким образом, мы обновляем значения maxsum и sum.
Затем мы смотрим на следующий элемент (-2). Добавление этого числа к 6 сделает sum = 4. Так как это не окончательное значение, наша субпослсдовательность выглядит как {6, -2}. Мы обновляем sum, но не maxsum.
Наконец мы смотрим па следующий элемент (3). Добавление 3 к sum (4) даст нам 7, таким образом, мы обновляем maxsum. Максимальная последовательность имеет вид {6, -2, 3}.
Когда мы работаем с развернутым массивом, логика остается такой же. Следующий код реализует этот алгоритм:
public static int getMaxSum(int[] a) {
int maxsum = 0;
int sum = 0;
for (int i = 0; i < a.lenght; i++) {
sum += a[i];
if (maxsum < sum) {
maxsum = sum;
} else if (sum < 0) {
sum = 0;
}
}
return maxsum;
}
А если массив состоит из отрицательных чисел? Как действовать в этом случае? Рассмотрим простой массив {-3, -10, -5}. Можно дать три разных ответа:
• -3 (если считать, что субпоследовательность не может быть пустой);
• 0 (субпоследовательность может иметь нулевую длину);
• MINIMUM_INT (для случая ошибки).
В нашем коде был использован второй ответ (sum = 0), но в этом вопросе не существует однозначного «правильного» решения. Обсудите это с интервьюером.
Разбор задачи по книге «Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию»
Вычисление максимального элемента последовательности
Пользователь
вводит 100 чисел. Найти максимальный
элемент последовательности.
Первое, что может
прийти в голову, – описать 100 переменных.
Это неправильно.
Нам не нужно
запоминать все 100 чисел. Достаточно
помнить только наибольшее среди них.
Последовательность действий будет
примерно такой: считываем новое число,
проверяем его на максимум и далее
переходим к следующему числу. Следовательно,
достаточно завести две переменные: в
одной из них будем хранить текущее
значение, в другой – максимальное. Для
реализации воспользуемся циклом for.
Пример:
var
x:
integer;
{текущее число, которое вводит
пользователь}
Max:
integer;
{максимальное число в последовательности}
i:
integer;
{счетчик для цикла}
begin
for i:=1 to 100 do
begin
writeln(‘Введите
очередное число:’);
readln(x);
{считываем очередное число
последовательности}
if (i=1)
or (x>Max) then Max:=x;
{если это первое
число, или если оно больше, чем текущий
максимум, то
это – максимальное число}
end;
writeln(‘Максимальное
число – ’, Max);
{печатаем результат}
end.
Как видно из кода,
все 100 чисел хранятся поочередно в одной
переменной x.
Текущее число будет максимальным, если
оно больше, чем текущий максимум или
если оно вообще первое (единственное)
в последовательности.
Основное отличие
данной программы от приведенных ранее
– здесь ввод данных организуется внутри
цикла.
Вычисление длины последовательности элементов
Пользователь
вводит последовательность чисел,
заканчивающуюся нулем. Найти максимальную
длину последовательности одинаковых
чисел (например, в последовательности
1 2 1 1 7 7 7 9 – три семерки).
Как и в предыдущем
примере, ввод здесь организуется внутри
цикла. Только на этот раз нам заранее
неизвестно, сколько элементов будет
содержать последовательность – нам
лишь известно, что она заканчивается
цифрой 0. Поэтому воспользуемся циклом
while
с условием «пока очередной элемент не
равен 0».
Чтобы определить
максимальную длину последовательности,
нам потребуется знать не только текущее
число, вводимое пользователем, но и
предыдущее, а также текущую максимальную
длину последовательности и длину текущей
последовательности.
Пример:
var
x:
integer;
{текущее число, которое вводит
пользователь}
xpred:
integer;
{предыдущее число }
MaxCount:
integer;
{максимальная длина последовательности}
Count:
integer;
{текущая длина последовательности}
begin
writeln(‘Введите
первое число:’);
readln(x);
{считываем первое число }
Count:=1
{инициализируем текущую длину – пока
1 элемент};
MaxCount:=1;
{ инициализируем максимальную длину
– пока 1}
while
x<>0
do
{пока не ввели 0}
begin
xpred:=x;
{последнее число становится предпоследним}
writeln(‘Введите
очередное число:’);
readln(x);
{считываем очередное число }
if
x=xpred
then
{если последнее число равно предпоследнему}
begin
inc(count);
{увеличиваем на единицу длину
текущей
последовательности}
if
Count>MaxCount then MaxCount:=Count;
{сравниваем
длину текущей последовательности с
максимальной
длиной}
end
else
Count:=1;
{если последнее число не совпадает с
предпоследним,
то это 1-ый элемент в новой
последовательности}
end;
writeln(‘Максимальное
число – ’, Max);
{печатаем результат}
end.
Представленный
выше исходный текст позволит найти нам
решение поставленной задачи. Обратите
внимание: здесь нам не потребовался
счетчик.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Добрый день, товарищи!
В этой публикации я расскажу вам, как найти максимальное число из заданной пользователем последовательности. Для этого мы проведем небольшое первое знакомство с массивами ( более детально они будут разобраны в будущих публикациях ).
Напишем нам задачу:
Разработать программу определения максимума из последовательности чисел. Все числа вводятся пользователем.
Хорошо. Значит исходя из задания можем предположить, что сначала нужно организовать ввод этой самой последовательности пользователем.
В конце статьи будет ссылка на скачивание кода с Яндекс.Диска!
1. Типы данных
Давайте подумаем: нам нужна последовательность цифр. Вроде бы логично ввести N переменных, чтобы пользователь просто вводил каждую. Вот.. Только сколько это – N? Вот и первая сложность – простыми переменными нам тут не обойтись.
Если с первыми тремя переменными проблем нет, то теперь у нас новый вариант их объявления – массивы.
Все переменные сделаем Integer для простоты эксперимента. Вы, разумеется, можете изменить тип данных на Real, при необходимости.
Как объявляется массив вы можете видеть выше.
- mass – имя массива, работает так же как имя переменной
- array – объявление переменной массивом
- [1..100] – диапазон массива. В данном массиве не может быть более 100 элементов
- of integer – тип данных массива, так же может быть и of char и of real и т.д.
2. Начало программы
В этом куске кода вводим пару пригласительных сообщений, и предлагаем пользователю ввести, какой длины будет его последовательность.
3. Заносим элементы в массив
Работает это так: просто вводим числа в последовательность по циклу.
От 1 до нашего максимального количества. Кроме того, mass[i] – это значение массива в данный момент. Например i = 3, значит mass[3] – это третий элемент массива. Вообще, есть такой нюанс, что нумерация в массиве начинается с 0, а не с 1, но в рамках этой программы останавливаться на этом не будем. Разберем это в публикации, посвященной массивам.
4. Находим максимум
Сейчас, до этих строк, наше Мах пустое. Для начала возьмем первый элемент введенной последовательности.
После этого объявим цикл (начиная с двух, так как первый элемент нами уже занят), который будет сравнивать каждое следующее число с нашим “максимальным”, и, если число больше – оно будет становится новым максимальным. Все просто!
В конце просто выведем это.
5. Тесты
Вот несколько наборов данных, которые использовались для тестов.
Как видим, максимальный элемент находится без проблем
6. Заключение
Вот мы и разобрали программу, которая находит максимальный элемент последовательности, а если быть точным – одномерного массива.
Весь код программы будет выглядеть так:
Как и говорил, вот ссылка на скачивание этого файла с Яндекс.Диска:
Скачать 21max.pas с Яндекс.Диска
Данный человек всегда открыт для обсуждения контента и общения с подписчиками, если найдутся какие либо вопросы то я обязательно постараюсь ответить на них.
По возможности я попросил бы подписаться и оценить публикацию. Сейчас это критически важно для развития канала. Так то!
Доброго вам всем здоровьица в эти трудные времена!
Skip to content
Задача «Максимум последовательности»
Условие
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наибольшего элемента последовательности.
Решение задачи от разработчиков на Python:
Другое решение задачи на Python:
Смотреть видео — Задача «Максимум последовательности» решение на Python
Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇
Related Posts