Как найти максимальную последовательность чисел

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
 
int main()
{
 
    int mas[8];
    for (int i = 0; i < 8; i++)
        cin >> mas[i];
 
    int max = mas[0];
    int min = mas[0];
    for (int i = 0; i < 8; i++)
    {
        if (max < mas[i])
            max = mas[i];
 
        if (min > mas[i])
            min = mas[i];
    }
    cout << "max value: " << max << endl;
    cout << "min value: " << min << endl;
 
}

Так сойдет?
Сначала вводишь подряд 8 чисел, и тебе сразу выводит максимальное и минимальное число.



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

Может так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main() {
    cout << "> ";
 
    int num, min, max;
    int count = 0;
 
    while (cin >> num) {
        if (count == 0) {
            min = num;
            max = num;
            ++count;
        }
        else {
            if (num < min)
                min = num;
            else if (num > max)
                max = num;
        }
    }
 
    cout << "Min: " << min << 'n'
        << "Max: " << max << 'n';
 
    system("pause");
    return 0;



0



Maxim Prishchepa

Эксперт С++

1936 / 1048 / 109

Регистрация: 29.03.2010

Сообщений: 3,167

04.10.2016, 10:31

6

тогда уже лучше:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
#include <limits.h>
int main() {
    cout << "> ";
 
    int num = 0;
    int min = INT_MAX;
    int max = 0;
 
    while (cin >> num) {
        max = std::max(max, num);
        min = std::min(min, num);
    }
 
    cout << "Min: " << min << 'n'
        << "Max: " << max << 'n';
 
    return 0;
}

но мне кажется тут достопочтенные преподы хотели бы удивить работу с динамическими массивами и поиск мин. и макс внутри массива…



0



Эксперт С++

4981 / 3088 / 456

Регистрация: 10.11.2010

Сообщений: 11,165

Записей в блоге: 10

04.10.2016, 11:10

7

Senid, а зачем переменная count?



0



Senid

0 / 0 / 1

Регистрация: 04.10.2016

Сообщений: 4

04.10.2016, 12:35

8

castaway, чтобы первое считанное число присвоить и min, и max. Но можно и без нее, так даже лучше

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main() {
    cout << "> ";
 
    int num, min, max;
    
    cin >> num;
    min = num;
    max = num;
 
    while (cin >> num) {
        if (num < min)
            min = num;
        else if (num > max)
            max = num;
    }
 
    cout << "Min: " << min << 'n'
        << "Max: " << max << 'n';
 
    system("pause");
    return 0;
}

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.

Представленный
выше исходный текст позволит найти нам
решение поставленной задачи. Обратите
внимание: здесь нам не потребовался
счетчик.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Добрый день, товарищи!

Максимальное число массива - последовательности в Pascal

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

Напишем нам задачу:

Разработать программу определения максимума из последовательности чисел. Все числа вводятся пользователем.

Хорошо. Значит исходя из задания можем предположить, что сначала нужно организовать ввод этой самой последовательности пользователем.

В конце статьи будет ссылка на скачивание кода с Яндекс.Диска!

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 с Яндекс.Диска

Максимальное число массива - последовательности в Pascal

Данный человек всегда открыт для обсуждения контента и общения с подписчиками, если найдутся какие либо вопросы то я обязательно постараюсь ответить на них.

По возможности я попросил бы подписаться и оценить публикацию. Сейчас это критически важно для развития канала. Так то!

Доброго вам всем здоровьица в эти трудные времена!

Skip to content

Задача «Максимум последовательности»

Условие

Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наибольшего элемента последовательности.

Решение задачи от разработчиков на Python:

Другое решение задачи на Python:

Смотреть видео — Задача «Максимум последовательности» решение на Python

Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇

Related Posts

Посмотреть все комментарии

wpDiscuz

0

Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Добавить комментарий