Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256

Максимальное число идущих подряд чисел

17.05.2024, 14:08. Показов 916. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
максимальное число идущих подряд чисел 5, 9, 7, 8, 1, 2, 3, 4, 1
ответ 4 :
1, 2, 3, 4
а программа выдает 5
##
Pascal
1
2
3
var a:=|5, 9, 7, 8, 1, 2, 3, 4, 1|;
var b:=a.Pairwise.Where(x->x[0]<x[1]).ToArray;
var c:=b.Length.Println;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2024, 14:08
Ответы с готовыми решениями:

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

Найти максимальное количество подряд идущих одинаковых элементов
Задача: На вход в первой строке подается целое положительное число N, а во второй строке — массив из N целых чисел. Выполнив...

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

16
694 / 7055 / 265
Регистрация: 11.08.2016
Сообщений: 3,964
17.05.2024, 17:36
5-9,7-8,1-2,2-3,3-4
0
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
17.05.2024, 18:51  [ТС]
Цитата Сообщение от Ivandur Посмотреть сообщение
5-9,7-8,1-2,2-3,3-4
это я знаю.
должно быть ответ 4 :
или хотя бы массив : 1, 2, 3, 4 - количество уже посчитаем
0
694 / 7055 / 265
Регистрация: 11.08.2016
Сообщений: 3,964
18.05.2024, 09:13
Так в твоей программе считается именно это.
0
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
18.05.2024, 10:12  [ТС]
Цитата Сообщение от Ivandur Посмотреть сообщение
считается именно это
исправить никак?
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
18.05.2024, 11:45
Я ещё жду пока это посмотрят: https://github.com/pascalabcne... /pull/3085

Но в данной задаче и версия без By сработает, раз вам надо кол-во а не сами элементы...
1
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
18.05.2024, 14:07  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
сами элементы
раз так сложнее - давайте с элементами

вот у меня ещё такие варианты -- но ответы не сходятся
в комментариях после строки - ответ который даёт программа

Pascal
1
2
3
4
5
6
7
8
9
## 
var a:=|5, 9, 7, 8, 1, 2, 3, 4, 1|;
a.Println;//5 9 7 8 1 2 3 4 1
var b:=a.Pairwise.Where(x->x[0]<x[1]).ToArray;//(5,9) (7,8) (1,2) (2,3) (3,4)
var d:=a.Pairwise.Where(x->x[0]<x[1]).ToArray.println;
var c:=b.Length.Println;//5
a.AdjacentGroup.Max(g->g.Length).ToString.Println();//1
a.AdjacentGroup.MaxBy(x -> x.Length).Length.Println();//1
a.AdjacentGroup.Select(v -> v.Count).Max.ToString.Println();//1
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
18.05.2024, 14:16
Ну так а что вы группируете? Вам надо найти последовательности где Sign(x[1]-x[0]) одинаковые. А вы группируете где сами пары одинаковые - одинаковых пар у вас нет, поэтому 1 всюду.

Цитата Сообщение от agvego5 Посмотреть сообщение
раз так сложнее - давайте с элементами
Вы как то задом наперёд прочитали. Вы ссылку то тыкнули? Тот PR добавляет By вресию, а в вашем случая я говорю и с версией БЕЗ By сработает.
0
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
18.05.2024, 18:09  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
ссылку то тыкнули
тыкнул - передрал код
:
программа выдаёт
(1,[1,2,3,4])
sequence of Tuple <integer, array of>

надо теперь как-то достать массив 1,2,3,4 потом посчитать количество элементов

Print(r.Item1,r.Item2);
//Item1 не объявлен в типе IEnumerable<Tuple<integer,IEnumerable<in teger>>>

Print(r[0],r[1]);
//Нет индексного свойства по умолчанию для типа IEnumerable<Tuple<integer,IEnumerable<in teger>>>

Pascal
33
34
35
36
37
38
39
40
41
42
43
function AdjacentGroupBy<T,TKey>(self: sequence of T; by: T->TKey); extensionmethod := self.AdjacentGroupBy(by, nil);
var a:=|5, 9, 7, 8, 1, 2, 3, 4, 1|;
var r:=a.Pairwise((a,b)->(a,b,Sign(b-a)))
.AdjacentGroupBy(\(a,b,s)->s)
.Where(\(s,items)->items.Length>1)
.Select(\(s,items)->(s, items.Select(\(a,b,s)->a)+items[^1][1]));
r.PrintLines;//Доступ к элементам кортежа
//Элементы (поля) кортежа имеют имена Item1, Item2 и т.д.:
//Print(r.Item1,r.Item2);//Item1 не объявлен в типе IEnumerable<Tuple<integer,IEnumerable<integer>>>
//К элементам кортежа можно обращаться также по индексу:
//Print(r[0],r[1]);//Нет индексного свойства по умолчанию для типа IEnumerable<Tuple<integer,IEnumerable<integer>>>
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
18.05.2024, 18:57
Цитата Сообщение от agvego5 Посмотреть сообщение
Print(r.Item1,r.Item2);
//Item1 не объявлен в типе IEnumerable<Tuple<integer,IEnumerable<in teger>>>
Ужас. Вы не понимаете что r это последовательность, или не знаете как достать первый/единственный элемент последовательности, который собственно будет картежом? Или может вы вообще не поняли что такое IEnumerable<...>?

И не нужна вам функция с By из того пула. Ещё раз:
Цитата Сообщение от Sun Serega Посмотреть сообщение
Но в данной задаче и версия без By сработает, раз вам надо кол-во а не сами элементы...
То есть в данной задаче вам достаточно обычное .AdjacentGroup, которое уже есть в стандартной библиотеке, хотя .AdjacentGroupBy мощнее
Но в любом случае, по моему вы не поняли по какому принципу эти обе функции работают... Они группируют подряд идущие ОДИНАКОВЫЕ элементы (в случае By - подряд ищущие элементы с одинаковым ключами)
Вам надо найти все группы подряд идущий одинаковых знаков разниц соседних элементов (т.е. Sign(x[1]-x[0])), и среди этих групп найти саму длинную.
0
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
18.05.2024, 19:28  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
достаточно обычное .AdjacentGroup
да ну что вы загадками пишете?

function AdjacentGroup<T>(Self: sequence of T): sequence of array of T;
Группирует одинаковые подряд идущие элементы, получая последовательность массивов

1,2,3,4 => это никак не одинаковые подряд идущие элементы <= они все разные
0
 Аватар для canadamoscow
1179 / 430 / 194
Регистрация: 23.03.2020
Сообщений: 1,021
Записей в блоге: 1
18.05.2024, 21:01
Pascal
1
2
3
4
5
6
##
var a:=|5, 9, 7, 8, 1, 2, 3, 4, 1|;
var n := a.High;
var b := a.ConvertAll((t,i)-> (0..n-i).TakeWhile(j-> t+j=a[i+j]).Last + 1);
b.Max.Println;
a[b.IndexMax:b.IndexMax+b.Max].Println
0
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
18.05.2024, 21:39  [ТС]
Цитата Сообщение от canadamoscow Посмотреть сообщение
1, 2, 3, 4
с 1, 2, 3, 4 работает >> 5 9 7 8 1 2 3 4 1 ответ 4 = (1 2 3 4)
а вы считали чтобы разница была 1 ?

а если такие варианты:

1 5 2 3 8 ответ 3 =(2 3 8)
8 11 ответ 2 =(8 11)

тут Sun Serega, намекал на Sign(x[1]-x[0])
чтобы разность была положительная, но куда её приткнуть он не сказал
0
 Аватар для canadamoscow
1179 / 430 / 194
Регистрация: 23.03.2020
Сообщений: 1,021
Записей в блоге: 1
18.05.2024, 22:13
Pascal
1
2
3
4
5
6
##
var a:=|1, 5, 2, 3, 8|;
var n := a.High;
var b := a.ConvertAll((t,i)-> (0..n-i-1).TakeWhile(j->a[i+j]<a[i+j+1]).Count+1);
b.Max.Println;
a[b.IndexMax:b.IndexMax+b.Max].Println
Добавлено через 3 минуты
Pascal
1
2
3
4
5
6
##
var a:=|1, 5, 2, 3, 8|;
var b := |1|*a.Length;
b.fill(i-> (i>0) and (a[i-1] < a[i]) ? b[i-1]+1 : 1);
b.Max.Println;
a[b.IndexMax-b.Max+1:b.IndexMax+1].Println
1
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
18.05.2024, 23:21
Цитата Сообщение от agvego5 Посмотреть сообщение
да ну что вы загадками пишете?
Потому что вы не тупой неуч, который пришёл за готовым решением чтобы сдать на тройку, не думая самостоятельно. Обучение происходит на совершенно другом уровне, когда вы сами приходите к решению, а не изучает чужое.

Ну, раз уже готовое покидали, вот что я имел в виду:
Pascal
1
2
3
4
5
6
7
8
9
## var a := |5, 9, 7, 8, 1, 2, 3, 4, 1|;
// Находим направления (-1=вниз, 0=никуда, +1=вверх) между элементами
var b := a.Pairwise((x,y)->Sign(y-x));
// Находим группы одинаковых направлений
var c := b.AdjacentGroup;
// Находим размер самой длинной группы
// +1, потому что a=|1, 2, 3| => b=|1, 1|
// То есть направлений на 1 меньше чем кол-во элементов последовательности
c.Max(g->g.Length+1).Print;
Направления 0 можно отфильтровывать с .Where, или использовать x[0]<x[1] как у самом первом коде тут - тогда направления 0 и -1 будут считаться равны (оба false потому что x[0]>=x[1])
На сколько я понимаю в условии про это не сказано, поэтому думаю при вводе 1 2 2 2 3 самая длинная последовательность это 2 2 2
1
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
19.05.2024, 09:59  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
при вводе 1 2 2 2 3 самая длинная последовательность это 2 2 2
тогда бы сработал код выше, где про пары
имелось ввиду что каждое следующее число больше предыдущего
Цитата Сообщение от Sun Serega Посмотреть сообщение
не тупой неуч
о спасибо )
но у меня не получалось Потому что я так пытался:
из
var b:=a.Pairwise.Where(x->x[0]<x[1]).ToArray;
сделать
var b:=a.Pairwise.Where(x->Sign(x[1]-x[0])).ToArray;
ведь
x[0]<x[1] почти совпадает с x[1]-x[0] только знак поменять и индексы
но так не заработало
С данным списком формальных параметров невозможно...
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
19.05.2024, 10:33
Цитата Сообщение от agvego5 Посмотреть сообщение
каждое следующее число больше предыдущего
Не вижу это в условии, но тогда:
Pascal
1
2
3
4
5
## |5, 9, 7, 8, 1, 2, 3, 4, 1|
.Pairwise((x,y)->x<y)
.AdjacentGroup
.Where(g->g[0])
.Max(g->g.Length+1).Print;
Добавлено через 49 секунд
Цитата Сообщение от agvego5 Посмотреть сообщение
С данным списком формальных параметров невозможно...
???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2024, 10:33
Помогаю со студенческими работами здесь

Найти максимальное количество бусинок одного цвета, идущих подряд
Помогите пожалуйста решить задачу: Имеется замкнутое ожерелье, состоящее из бусинок одного из трёх возможных цветов: красного, жёлтого,...

В массиве найти максимальное количество подряд идущих одинаковых элементов
На вход в первой строке подается целое положительное число N, а во второй строке — массив из N целых чисел. Выполнив однократный...

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

Определить количество чисел в наиболее длинной подпоследовательности из подряд идущих чисел одного знака
Дана непустая последовательность не нулевых целых чисел, за которой следует 0: Определить количество чисел в наиболее длинной...

Определить наибольшее число идущих подряд одинаковых элементов в массиве
Помогите изменить программу. Дана: Определить наибольшее число идущих подряд положительных элементов в массиве А. Необходимо: Дан...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru