1 / 1 / 1
Регистрация: 02.02.2014
Сообщений: 109
1

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

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

Author24 — интернет-сервис помощи студентам
В одномерном массиве 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2014, 14:36
Ответы с готовыми решениями:

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

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

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

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

4
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
10.02.2014, 15:11 2
Цитата Сообщение от 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  [ТС] 3
Ikol, Спасибо ... но вот эта строчка for (int j=i-1;a<x;i++) не понятна...

Добавлено через 6 минут
Ikol, Этот код не работает
0
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
10.02.2014, 16:04 4
Цитата Сообщение от 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  [ТС] 5
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
10.02.2014, 16:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2014, 16:30
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru