Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 33

Найти самую длинную последовательность удовлетворяющую условию A[i+1]=A[i]+1

21.06.2021, 02:12. Показов 2069. Ответов 6

Студворк — интернет-сервис помощи студентам
После введения с клавиатуры произвольного одномерного массива целых чисел(в границах знакового целого типа)
найти и вывести на экран самую длинную последовательность чисел, что стоят рядом и удовлетворяют условию вида Ai+1=Ai+1.

Введение каждого числа заканчивается нажиманием "Enter", введение останавливается нажатием 0.
не получается...
вот мой код
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
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <stdio.h>
#include<math.h>
using namespace std;
 
int main()
{
    const int d = 100;
    setlocale(LC_ALL, "rus");
    int a[d], k = -1, n = 0, y=0, max=1;
    
    do
    {
        ++k;
        cin >> a[k];
 
    } while (a[k] != 0);
    for (int i = 0; i < k; i++)
    {
        cout << a[i] << " ";
 
    }
    cout << endl;
    cout << " The longest sequence (a[i+1] = a[i] + 1):\n";
    for (int i = 0; i < k; i++)
    {
        y = i;
        if(a[i+1]==a[i]+1)
        {
            ++i;
            ++n;
        }
        if (n> max) max = n;
        if (n == max) for (int j=y; j <= i; j++) 
        cout << a[j]<<" ";
            
    }
   
    cout << endl;
    system("pause");
    return 0;
}
помогите, пожалуйста. Завтра утром сдавать. Заранее спасибо)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2021, 02:12
Ответы с готовыми решениями:

После введения с клавиатуры произвольного одномерного массива целых чисел(в границах знакового целого типа) найти и вывести на экран самую длинную пос
После введения с клавиатуры произвольного одномерного массива целых чисел(в границах знакового целого типа) найти и вывести на экран самую...

После ввода с клавиатуры произвольного одномерного массива целых чисел (объекта данного класса),в пределах целого типа вывести в два столбика положите
Здравствуйте.помогите пожалуйста...вот такая задачка. После ввода с клавиатуры произвольного одномерного массива целых чисел (объекта...

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

6
 Аватар для ПерС
587 / 490 / 371
Регистрация: 05.11.2013
Сообщений: 1,271
Записей в блоге: 6
21.06.2021, 08:36
Ввод с клавиатуры не делал.
Если искомых последовательностей несколько, найдёт первую.

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
31
32
33
34
35
#include <iostream>
using namespace std;
 
int getLongestSequence(int a[], int n, int &maxidx) {
 int maxlen = 0, currlen = 0, curridx = 0;
 if (n < 2) return 0;
 for (int i = 0; i < n - 1; i++) {
  if (a[i+1] == a[i] + 1) {
   currlen++;
   if (currlen == 1) curridx = i;
  }
  else {
   if (currlen > maxlen) {
    maxlen = currlen + 1;
    maxidx = curridx;
   }
   currlen = 0;
  }
 }
 if (maxlen == 0 && currlen > 0) { maxlen = currlen + 1; maxidx = n - 1 - currlen; }
 return maxlen;
}
 
int main() {
 int arr[] = { 1,1,2,3,-5,-4,-3,7,8,9 };
 int n = sizeof(arr) / sizeof(int);
 int maxidx = -1;
 int maxlen = getLongestSequence(arr, n, maxidx);
 if (maxlen > 0) {
  cout << "Length=" << maxlen << ", index (from 1)=" << maxidx + 1 << endl;
  for (int i = maxidx; i < maxidx + maxlen; i++) cout << arr[i] << " ";
 }
 else cout << "No sequence found" << endl;
 return 0;
}
1
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 33
21.06.2021, 11:14  [ТС]
А можете помочь на основании моего кода? Преподаватель требует простой язык с++. Без разных функций и тому подобного. Просто циклы, условия и тому подобное. Спасибо)
0
 Аватар для ПерС
587 / 490 / 371
Регистрация: 05.11.2013
Сообщений: 1,271
Записей в блоге: 6
21.06.2021, 12:31
Внутри getLongestSequence заменить имя a на arr
Перенести строки 5 - 20, то есть, тело функции вместо строки 28
Удалить пустую функцию getLongestSequence, в которой остался только оператор return

Свой код для ввода массива с клавиатуры, думаю, сумеете вставить вместо моего определения массива в коде.

Не по теме:

"Без разных функций и тому подобного" - это усложнение, а не упрощение программирования

1
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 33
21.06.2021, 16:04  [ТС]
Я что-то меняю, но не до конца выходит...
#include <iostream>
#include <stdio.h>
#include<math.h>
using namespace std;

int main()
{
const int d = 100;
setlocale(LC_ALL, "rus");
int a[d], k = -1, n = 0, y=0, max=1;

do
{
++k;
cin >> a[k];

} while (a[k] != 0);
for (int i = 0; i < k; i++)
{
cout << a[i] << " ";

}
cout << endl;
int arr[d];
int maxlen = 0, currlen = 0, curridx = 0;
if (n < 2) return 0;
for (int i = 0; i < k - 1; i++) {
if (a[i + 1] == a[i] + 1) {
currlen++;
if (currlen == 1) curridx = i;
}
else {
if (currlen > maxlen) {
maxlen = currlen + 1;
max = curridx;
}
currlen = 0;
}
}
if (maxlen == 0 && currlen > 0) { maxlen = currlen + 1; max = k - 1 - currlen; }
if (maxlen > 0) {
cout << "Length=" << maxlen << ", index (from 1)=" << max + 1 << endl;
for (int i = max; i < max + maxlen; i++) cout << arr[i] << " ";
}
else cout << "No sequence found" << endl;
return 0;
}

Добавлено через 55 минут
ПерС,
Я что-то меняю, но не до конца выходит...
#include <iostream>
#include <stdio.h>
#include<math.h>
using namespace std;

int main()
{
const int d = 100;
setlocale(LC_ALL, "rus");
int a[d], k = -1, n = 0, y=0, max=1;

do
{
++k;
cin >> a[k];

} while (a[k] != 0);
for (int i = 0; i < k; i++)
{
cout << a[i] << " ";

}
cout << endl;
int arr[d];
int maxlen = 0, currlen = 0, curridx = 0;
if (n < 2) return 0;
for (int i = 0; i < k - 1; i++) {
if (a[i + 1] == a[i] + 1) {
currlen++;
if (currlen == 1) curridx = i;
}
else {
if (currlen > maxlen) {
maxlen = currlen + 1;
max = curridx;
}
currlen = 0;
}
}
if (maxlen == 0 && currlen > 0) { maxlen = currlen + 1; max = k - 1 - currlen; }
if (maxlen > 0) {
cout << "Length=" << maxlen << ", index (from 1)=" << max + 1 << endl;
for (int i = max; i < max + maxlen; i++) cout << arr[i] << " ";
}
else cout << "No sequence found" << endl;
return 0;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
21.06.2021, 16:15
Лучший ответ Сообщение было отмечено Sofico как решение

Решение

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <stdio.h>
#include<math.h>
using namespace std;
 
int main()
{
    const int d = 100;
    setlocale(LC_ALL, "rus");
    int a[d], k = -1, n = 0, y=0, max=1, max_i=0;
    
    do
    {
        ++k;
        cin >> a[k];
 
    } while (a[k] != 0);
    for (int i = 0; i < k; i++)
    {
        cout << a[i] << " ";
 
    }
    cout << endl;
    cout << " The longest sequence (a[i+1] = a[i] + 1):\n";
    for (int i = 0; i < k-1; i++)
    {
        ++n;
        if(a[i+1]!=a[i]+1)
        {
          n=1;
          y = i+1;
        }
        if (n> max) {
           max = n;
           max_i = y;
        }
            
    }
    for (int i = max_i ; i < max_i+max; i++) cout << arr[i] << " ";
   
    cout << endl;
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 33
22.06.2021, 09:10  [ТС]
Огромное спасибо) Благословений
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2021, 09:10
Помогаю со студенческими работами здесь

Ввести из клавиатуры строку разделенных пропусками целых чисел (в пределах знакового целого типа), закончив введение нажатием <Enter> и вывести на экр
Ввести из клавиатуры строку разделенных пропусками целых чисел (в пределах знакового целого типа), закончив введение нажатием &lt;Enter&gt;...

Найти наибольший общий делитель для элементов произвольного одномерного массива целых чисел
Всем привет! Помогите пожалуйста решить задачу в Pascal: Найти наибольший общий делитель для элементов произвольного одномерного...

С произвольного одномерного массива целых чисел М1 сформировать массив М2, состоящий из таких элементов, не повторялись
С произвольного одномерного массива целых чисел М1 сформировать массив М2, состоящий из таких элементов, не повторялись в М1. Пример,...

Результат, после введения чисел с клавиатуры
Начал изучать C#. реши написать простенькую программу, в которой вычисляется результат, после ввода чисел. Собственно всё здесь написано:...

Создать функцию одномерного массива с элементами произвольного типа методом вставок
Помогите написать код задачи ниже данной вам, очень срочно, завтра сдавать её а я в ней вообще не разбираюсь. Создать функцию...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru