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

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

04.03.2021, 14:41. Показов 4346. Ответов 19

Студворк — интернет-сервис помощи студентам
Задание:
Задан массив а1, а2, ..., аn. Имеется в виду, что в нем есть отрицательные и положительные числа. Найти самую длинную последовательность чисел с одним знаком.


Написал такой код, но получается не то что нужно. В выводе присутствуют значения с (-)
Миниатюры
Найти самую длинную последовательность чисел с одним знаком  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2021, 14:41
Ответы с готовыми решениями:

Найти самую длинную последовательность эементов массива с одинаковым знаком
Задан массив а1, а2, ..., аn. Имеется в виду, что в нем есть отрицательные и положительные числа. Найти самую длинную последовательность...

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

Найти самую длинную монотонную последовательность
Добрый вечер. Помогите с задачей - Найти максимальную по длине монотонную ( либо неубывающую, либо невозрастающую) подпоследовательность....

19
0 / 0 / 0
Регистрация: 26.02.2021
Сообщений: 13
04.03.2021, 14:42  [ТС]
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
 
using namespace std;
 
int main()
{
 
    const int size = 15;
    int array[size];
    int positiveCount = 0;
    int negativeCount = 0;
    int positiveLen = 0;
    int negativeLen = 0;
    int tmpPositive = 0;
    int tmpNegative = 0;
    int indexPositive = 0;
    int indexNegative = 0;
    int tmpIndexPositive = 0;
    int tmpIndexNegative = 0;
    
 
    
    for (int i = 0; i < size; i++) {
            cout << "[" << i + 1 << "]" << ": ";
            cin >> array[i];
        }
        cout << "\nВаш массив: ";
 
    for (int i = 0; i < size; i++)
    {
 
        if(array[i] >= 0)
        {
            if(tmpNegative > negativeLen)
            {
                negativeLen = tmpNegative;
                tmpNegative = 0;
                indexNegative = tmpIndexNegative;
                tmpIndexNegative = 0;
            }
            positiveCount++;
            tmpPositive++;
            tmpIndexPositive = i;
        }
        if(array[i] < 0)
        {
            if(tmpPositive > positiveLen)
            {
                positiveLen = tmpPositive;
                tmpPositive = 0;
                indexPositive = tmpIndexPositive;
                tmpIndexPositive = 0;
 
            }
            negativeCount++;
            tmpNegative++;
            tmpIndexNegative = i;
        }
 
    }
 
        if(tmpNegative > negativeLen)
        {
            negativeLen = tmpNegative;
            tmpNegative = 0;
            indexNegative = tmpIndexNegative;
            tmpIndexNegative = 0;
        }
 
        if(tmpPositive > positiveLen)
        {
            positiveLen = tmpPositive;
            tmpPositive = 0;
            indexPositive = tmpIndexPositive;
            tmpIndexPositive = 0;
 
        }
 
    if(negativeLen > positiveLen)
    {
        cout << "Negative sequence of number: ";
        for(int i = indexNegative-negativeLen+1; i < indexNegative+1; i++)
            cout << array[i] << " ";
    }
 
    if(negativeLen < positiveLen)
    {
        cout << "Positive sequence of number: ";
        for(int i = indexPositive-positiveLen+1; i < indexPositive+1; i++)
            cout << array[i] << " ";
    }
    if(negativeLen == positiveLen)
    {
 
        cout << "Negative sequence of number: ";
        for(int i = indexNegative-negativeLen+1; i < indexNegative+1; i++)
            cout << array[i] << " ";
        cout << endl;
        cout << "Positive sequence of number: ";
        for(int i = indexPositive-positiveLen+1; i < indexPositive+1; i++)
            cout << array[i] << " ";
 
    }
    cout << endl;
}
0
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,685
04.03.2021, 15:08
Цитата Сообщение от ProstoYaa Посмотреть сообщение
Задание:
Задан массив а1, а2, ..., аn. Имеется в виду, что в нем есть отрицательные и положительные числа. Найти самую длинную последовательность чисел с одним знаком.
Здесь ошибка в задании.
Если самых длинных последовательностей будет найдено 2 или более, тогда чо?
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.03.2021, 15:27
Цитата Сообщение от Verevkin Посмотреть сообщение
Здесь ошибка в задании
условие корректное. если не указано другое выводится первая такая последовательность.
2
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,685
04.03.2021, 17:53
Цитата Сообщение от Yetty Посмотреть сообщение
условие корректное. если не указано другое выводится первая такая последовательность.
Само твоё высказывание доказывает, что условие некорректное и нуждается в доработке, указанной тобой.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.03.2021, 18:01
Цитата Сообщение от Verevkin Посмотреть сообщение
нуждается в доработке
даже читать не интересно. первое значение выводится по умолчанию. тебя послушать так каждую вторую задачу надо переписывать
2
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,685
04.03.2021, 18:06
Цитата Сообщение от Yetty Посмотреть сообщение
даже читать не интересно. первое значение выводится по умолчанию. тебя послушать так каждую вторую задачу надо переписывать
Это не я придумал. В ТЗ разночтений, вынуждающих задавать наводящие вопросы, быть не должно! Я настаиваю!

Это же классика!

2
0 / 0 / 0
Регистрация: 26.02.2021
Сообщений: 13
04.03.2021, 20:59  [ТС]
Нужно что-бы значения из массива брались только с одним знаком и только те, которые по возрастанию.

Как это сделать я уже хз, кто знает пусть, пожалуйста, поможет(хелпанёт)!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
04.03.2021, 21:32
Цитата Сообщение от Verevkin Посмотреть сообщение
Это же классика!
- вот поэтому народ и считает программистов малохольными. И не без оснований. Не стоит уподобляться герою этого ролика: Скока вешать в граммах
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
04.03.2021, 21:38
Цитата Сообщение от Verevkin Посмотреть сообщение
Если самых длинных последовательностей будет найдено 2 или более, тогда чо?
Цитата Сообщение от Verevkin Посмотреть сообщение
Здесь ошибка в задании.
Либо намёк на то, что нужная последовательность всегда одна.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.03.2021, 21:45
Цитата Сообщение от Catstail Посмотреть сообщение
вот поэтому народ и считает программистов малохольными. И не без оснований.
Не знаю о каких таких основаниях, если задача не до конца определена - решений много.
Угадывать какое не дело программиста, а гадалки.

Вот где в изначальном условии что то про "возрастание" :
Цитата Сообщение от ProstoYaa Посмотреть сообщение
Нужно что-бы значения из массива брались только с одним знаком и только те, которые по возрастанию.
Добавлено через 1 минуту
Цитата Сообщение от argcargv Посмотреть сообщение
Либо намёк на то, что нужная последовательность всегда одна.
ключевое слово - "намек" )
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
04.03.2021, 21:49
Цитата Сообщение от SmallEvil Посмотреть сообщение
Не знаю о каких таких основаниях
- а народ знает, раз анекдоты сочиняет . Герой анекдота - явный дурак. Применительно к теме Yetty абсолютно прав. Обычно предполагается первый объект. И проблем не возникает.
Цитата Сообщение от SmallEvil Посмотреть сообщение
Угадывать какое не дело программиста,
- я бы в этом контексте заменил слово "программист" словом "кодер".
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.03.2021, 22:55
Цитата Сообщение от ProstoYaa Посмотреть сообщение
Задан массив а1, а2, ..., аn. Имеется в виду, что в нем есть отрицательные и положительные числа. Найти самую длинную последовательность чисел с одним знаком.
+
Цитата Сообщение от ProstoYaa Посмотреть сообщение
Нужно что-бы значения из массива брались только с одним знаком и только те, которые по возрастанию
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
using namespace std;
 
bool checkNumbers(int num1, int num2)
{
    if ( (num1<0 && num2<0 ) || ( num1>0 && num2>0 ) )
      if (num1<num2)
        return true;
    return false;
}
 
int main()
{
    int arr[]={10, -2, 11, 16, 34, 55, -33, 38, 11, 212, -33, -32, -31, -30};
    int size = sizeof(arr)/sizeof(arr[0]);
    int seq_s =-1, seq_e = -1;
    int res_seq_s=-1, res_seq_e=-1;
    int res_seq_size=0;
    int seq_size = 0;
    int num1, num2;
    for (int i=1; i<size; ++i)
    {
        if (checkNumbers(arr[i-1],arr[i]))
        {
           if (seq_s == -1) 
               seq_s = i-1;
           seq_e = i;
           seq_size = seq_e - seq_s;
        }
        else
        {
            if (res_seq_size < seq_size)
            {
               res_seq_s = seq_s;
               res_seq_e = seq_e; 
               res_seq_size = seq_size;
            }
            seq_size = 0;
            seq_s = -1; seq_s=-1;                
        }
    }
    if (res_seq_size < seq_size)
    {
        res_seq_s = seq_s;
        res_seq_e = seq_e; 
        res_seq_size = seq_size;
    }
   
    if (res_seq_size==0)
        cout<<"Sequnce not found!";
    else
    {
     cout<<"First longest sequnce : ";
        for (int i=res_seq_s; i<=res_seq_e; ++i)
            cout<<arr[i]<<" ";
    }
    return 0;
}
Добавлено через 8 минут
Цитата Сообщение от Catstail Посмотреть сообщение
я бы в этом контексте заменил слово "программист" словом "кодер".
И опять говорим про разные вещи,
Я про формирования ТЗ и что это часто проблема.
А вы Catstail, о том что всем нам надо думать. (за себя и за того парня)
Но когда ставят ТЗ и оно неоднозначно. Что нужно сделать ? Конкретизировать.
Есть случаи когда нужно последнюю такую последовательность найти или еще какое то действие при наличии
более одной последовательности.
А "заказчик" (он же автор ТЗ) просто не удосужился об этом подумать/сказать.
Я не согласен что конечный программист должен сам такое "решать" (угадывать).
Для этого есть спец. люди. (потому командой работать легче)

А смотреть и брать пример с STL тоже не выход.
Вы такое напишите, а Вам скажут, не тоооооо, все переделывайте. (лишь потому что вы сами "решили" (угадали))

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
Для этого есть спец. люди.
в данном случае - это задача автора темы (ТС), конкретизировать задачу (как он ее понимает).
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
04.03.2021, 22:58
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
45
46
47
48
49
50
#include <iostream>
#include <sstream>
using namespace std;
 
string f( int n){
   stringstream t;
   string w;
   t<<n;
   t>>w;
   return w;
 }
 
int main(){
  string s;
  int arr[15]={11,-2,-3,4,-5,-6,7,8,9,10,11,11,13,14,15};
 
   for(int i=0; i<15;i++)
      if(arr[i]<0){
          s+=f(arr[i]);
          s+=' ';
          if(arr[i+1]>0 || i==14)
                 s+='?';
     }
    for(int i=0; i<15;i++)
       if(arr[i]>0){
           s+=f(arr[i]);
           s+=' ';
           if(arr[i+1]<0 || i==14)
                  s+='?';
     }
    size_t k=0,max=0,count=0;
    string t,word;
    while(s[k]){
       if(s[k]!='?')
             t+=s[k];
       if(s[k]!=' ')
             count++;
       if(s[k]=='?'){
          if(max<=count){
             max=count;
             count=0;
             word=t;
             t="";
          }
      }
    k++;
   }
   cout<<word;
   return 0;
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.03.2021, 23:06
повар1,
int arr[15]={11,-2,-3,4,-5,-6,7,-8,-9,-10,-11,11,-13,14,-15};

результат : 4 7 9 11 14

не вижу такой последовательности
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
05.03.2021, 07:18
Цитата Сообщение от SmallEvil Посмотреть сообщение
Я про формирования ТЗ и что это часто проблема.
А вы Catstail, о том что всем нам надо думать. (за себя и за того парня)
Но когда ставят ТЗ и оно неоднозначно. Что нужно сделать ? Конкретизировать.
- все верно. Но в данном случае, конкретизировать у кого? У ТС? Это смешно.
1
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
05.03.2021, 09:00
Лучший ответ Сообщение было отмечено ProstoYaa как решение

Решение

SmallEvil, можете посмотреть
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
45
46
47
48
49
50
#include <iostream>
#include <sstream>
using namespace std;
 
string f( int n){
   stringstream t;
   string w;
   t<<n;
   t>>w;
   return w;
 }
 
int main(){
  string s;
  int arr[15]={11,-2,-3,4,-5,-6,7,-8,-9,-10,-11,11,-13,14,-15};
 
   for(int i=0; i<15;i++)
      if(arr[i]<0){
          s+=f(arr[i]);
          s+=' ';
          if(arr[i+1]>0 || i==14)
                 s+='?';
     }
    for(int i=0; i<15;i++)
       if(arr[i]>0){
           s+=f(arr[i]);
           s+=' ';
           if(arr[i+1]<0 || i==14)
                  s+='?';
     }
    size_t k=0,max=0,count=0;
    string t,word;
    while(s[k]){
       if(s[k]!='?')
             t+=s[k];
       if(s[k]!=' ')
             count++;
       if(s[k]=='?'){
          if(max<count){
             max=count;
             word=t;
          }
           t="";
           count=0;
         }
       k++;
    }
    cout<<word;
    return 0;
}
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
05.03.2021, 09:37
Добавлено через 3 минуты
Catstail, ну вот и пример от повар1, если не оговорено какая последовательность
он берет последнюю (без учета возрастания чисел))
И если не оговорено иное - это не ошибка.
1
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
05.03.2021, 10:00
Цитата Сообщение от повар1 Посмотреть сообщение
if(s[k]!=' ')
это ошибка. должно быть так
Цитата Сообщение от повар1 Посмотреть сообщение
if(s[k]==' ')
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
05.03.2021, 10:19
Цитата Сообщение от SmallEvil Посмотреть сообщение
И если не оговорено иное - это не ошибка.
- если бы эту работу сдавали мне, я бы спросил: "а какая п-ть в твоем коде возвратится?" При правильном ответе - зачет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2021, 10:19
Помогаю со студенческими работами здесь

Найти самую длинную неубывающую последовательность
Дан список из n целых чисел a1, a2,..., a. Найти самую длинную неубывающую последовательность элементов списка

Задана последовательность из N чисел. Найти самую длинную последовательность, обладающую данным свойством
Прошу помощи мастеров решить ОДНУ задачкУ: 1) Задана последовательность из N чисел. Найти самую длинную последовательность, обладающую...

В списке чисел найти самую длинную последовательность
Помогите, пожалуйста, решить задачу. Очень нужно. В списке чисел, которые записаны в файл (имеют строчный тип), найти самую длинную...

Найти самую длинную последовательность чисел в массиве
В списке чисел найти самую длинную последовательность, которая упорядочена по возрастанию. Если таких последовательностей несколько (с...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru