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

Одномерный массив более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент

10.02.2014, 14:36. Показов 1446. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В одномерном массиве A=(a1, а2, ..., аn) все группы элементов, содержащие более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент.
Помогите разобраться ... Если в массиве попадается больше трех подряд отрицательных их надо убрать и вместо них записать один максимальный элемент..
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
cout<<endl<<endl<<"MAXSIMALNII ILEMENT:";
for (int i=0; i<x; i++)
    if(a[i]>a[i_max])
        i_max=i;
        cout<< "a["<<i_max<<"] ="<<a[i_max]<<endl<<endl;
 
 
int k=0,n=0,ik=0;
for (int i=0;i<x-n;i++)
       {
        if(a[i]<0)
            {
               k++;
               ik=i;
               if (k>3) 
               {            
                      for ( int i=ik-2;a[i]<0;i++)
                                {                                   
                          for(int j=i; j<11-n;j++ )
                               
                          { a[j]=a[j+1];}
                              
                          k=0;i--;n++;
                    
                    
                              }
                a[ik-3]=a[i_max];                   
                           
               }                                      
        
        }
        
        
    if(a[i]>0){k=0;}
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2014, 14:36
Ответы с готовыми решениями:

Одномерный массив более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент
В одномерном массиве A=(a1, а2, ..., аn) все группы элементов, содержащие более 3-х подряд идущих отрицательных элементов, заменить на...

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

Двумерные массивы. Найти новый одномерный массив, максимальный элемент, заменить третий элемент
Помогите пожалуйста написать хотя бы одну из этих программ: Дана матрица А(5,5) 1.Найти новый одномерный массив С из сумм элементов...

4
 Аватар для Ikol
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
10.02.2014, 15:11
Цитата Сообщение от Valera1984 Посмотреть сообщение
В одномерном массиве A=(a1, а2, ..., аn) все группы элементов, содержащие более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент.
Помогите разобраться ... Если в массиве попадается больше трех подряд отрицательных их надо убрать и вместо них записать один максимальный элемент..
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
cout<<endl<<endl<<"MAXSIMALNII ILEMENT:";
for (int i=0; i<x; i++)
    if(a[i]>a[i_max])
        i_max=i;
        cout<< "a["<<i_max<<"] ="<<a[i_max]<<endl<<endl;
 
 
int k=0,n=0,ik=0;
for (int i=0;i<x-n;i++)
       {
        if(a[i]<0)
            {
               k++;
               ik=i;
               if (k>3) 
               {            
                      for ( int i=ik-2;a[i]<0;i++)
                                {                                   
                          for(int j=i; j<11-n;j++ )
                               
                          { a[j]=a[j+1];}
                              
                          k=0;i--;n++;
                    
                    
                              }
                a[ik-3]=a[i_max];                   
                           
               }                                      
        
        }
        
        
    if(a[i]>0){k=0;}
    }
Не совсем понял, что вы пытаетесь сделать тут, но если вы ищете максимальный элемент массива, то это будет выглядеть как-то так:

C++
1
2
3
4
5
6
cout<<endl<<endl<<"MAXSIMALNII ILEMENT:";
int max=0; //в этой переменной будет содержаться максимальное значение
for (int i=0; i<x; i++)
    if(a[i]>max)    //сравнивать нужно именно с этой переменной
        max=a[i];   //И присваивать нужно именно значение, а не индекс
        cout<< "Max = "<<max]<<endl<<endl;
Ну а сама замена примерно так(самый простой вариант)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int k=0;
for (int i=0;i<x;i++) 
       {
        if(a[i]<0)
            {
               k++;
               if (k>=3) 
               {     
                      a[j]=max;
                      x-=2;
                      for (int j=i-1;a<x;i++)
                          a[j]=a[j+2];
               }                                      
             }
        else k=0;\\В случае положительных чисел счётчик необходимо обнулять, чтобы он мог заново считать подряд идущие отрицательные числа                                   
        }
0
1 / 1 / 1
Регистрация: 02.02.2014
Сообщений: 109
10.02.2014, 15:32  [ТС]
Ikol, Спасибо ... но вот эта строчка for (int j=i-1;a<x;i++) не понятна...

Добавлено через 6 минут
Ikol, Этот код не работает
0
 Аватар для Ikol
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
10.02.2014, 16:04
Цитата Сообщение от Valera1984 Посмотреть сообщение
Ikol, Спасибо ... но вот эта строчка for (int j=i-1;a<x;i++) не понятна...
Ну всё просто. В месте массива, где был найден третий подряд идущий элемент мы начинаем менять массив.(Только косяк у себя нашёл, там где a[j]=max; нужно написать a[i-2]=max. Так вот, здесь мы перед циклом обхода массива присваиваем максимальное значение элементу, который был на 2 элемента раньше(чем последний, третий подряд идущий отрицательный элемент). Затем мы начинаем цикл с элемента, который был перед текущим, элементом (то есть 2й подряд идущий отрицательный элемент), и уже начиная с него, начинаем присваивать текущему элементу массива(от второго подряд идущего отрицательного элемента и далее), элемент, индекс которого на 2 больше(от следующего элемента, после последнего подряд идущего отрицательного и далее).

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int k=0;
for (int i=0;i<x;i++) 
       {
        k=0;
        if(a[i]<0)
           while ((a[i]<0)&&(i<x))   //Будет проходить массив, пока встречаются отрицательные элементы И не достигнут конец массива
               {
                    k++;   //Считает длину серии отрицательных элементов
                    i++;   //Увеличивает индекс массива на 1, таким образом обрабатывая следующий элемент массива
               }
 
               if (k>=3) 
               {     
                      a[i-k]=max;   //замена первого элемента серии на максимальный
                      x-=(k-1);      //изменение размера массива в соответствии с длинной серии
                      for (int j=i-k+1;j<x;j++)   //цикл изменения массива, начинается от второго элемента серии
                          a[j]=a[j+k-1];    //сама замена элементов, на элементы, идущие после последнего элемента серии
                i=0;  //обнуление индекса до 0, чтобы пройти массив сначала в поисках серии отрицательных элементов. Если не будет серии отрицательных элементов, удовлетврояющих условию(>3), то индекс обнуляться не будет
               }                                      
        }
Добавлено через 1 минуту
Полностью рабочий код, проверял через онлайн компилятор

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
#include <iostream>
 
using namespace std;
 
int main()
{
    int a[10] = {1, -2, -3, -4, 5, -6, -7, -8, -9, 10};
    int x=10;
    cout<<endl<<endl<<"MAXSIMALNII ILEMENT:";
int max=0; //в этой переменной будет содержаться максимальное значение
for (int i=0; i<x; i++)
    if(a[i]>max)    //сравнивать нужно именно с этой переменной
        max=a[i];   //И присваивать нужно именно значение, а не индекс
        cout<< "Max = "<<max<<endl<<endl;
int k=0;
for (int i=0;i<x;i++) 
       {
        k=0;
        if(a[i]<0)
           while ((a[i]<0)&&(i<x))   //Будет проходить массив, пока встречаются отрицательные элементы И не достигнут конец массива
               {
                    k++;   //Считает длину серии отрицательных элементов
                    i++;   //Увеличивает индекс массива на 1, таким образом обрабатывая следующий элемент массива
               }
 
               if (k>=3) 
               {     
                      a[i-k]=max;   //замена первого элемента серии на максимальный
                      x-=(k-1);      //изменение размера массива в соответствии с длинной серии
                      for (int j=i-k+1;j<x;j++)   //цикл изменения массива, начинается от второго элемента серии
                          a[j]=a[j+k-1];    //сама замена элементов, на элементы, идущие после последнего элемента серии
                i=0;  //обнуление индекса до 0, чтобы пройти массив сначала в поисках серии отрицательных элементов. Если не будет серии отрицательных элементов, удовлетврояющих условию(>3), то индекс обнуляться не будет
               }                                      
        }    
        
for (int i=0;i<x;i++)
cout<<a[i]<<" ";
   return 0;
}
1
1 / 1 / 1
Регистрация: 02.02.2014
Сообщений: 109
10.02.2014, 16:30  [ТС]
Ikol, Есть небольшой нюанс... массив должен уменьшиться... допустим
int x =12;
int a[12]={40,-12,-3,-5,-1,17,-8,-1,-65,-1,-6,4}
Должно выводиться a[]={40,40,17,40,4}^)

Добавлено через 13 минут
Ikol, Спасибо большое все работает...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2014, 16:30
Помогаю со студенческими работами здесь

Максимальный элемент каждого столбца заменить произведением отрицательных элементов его же
4) Задана матрица A(n,m), в каждом столбце которой максимальный элемент необходимо заменить произведением отрицательных элементов этого же...

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

Количество подряд идущих отрицательных элементов
Задание простое, просто хочу по-нормальному его растолковать. Дается целочисленный массив из 30 элементов, нужно подсчитать...

Подсчет подряд идущих отрицательных элементов
C 2 № 2908. Опишите на русском языке или на одном из языков программирования алгоритм подсчета максимального количества подряд идущих...

Одномерный массив. Определить наибольшее количество подряд идущих нулей
Дан целочисленный массив А. Определить наибольшее количество подряд идущих нулей


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru