Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Считать вектор из файла, записать вектор в файл https://www.cyberforum.ru/ cpp-beginners/ thread1093341.html
Доброго времени суток. Программа должна считывать числа из заданного файла, потом записывать в другой файл вектор, в котором каждый элемент на 1 больше. Билдер dev c++ 4.9.9.5. Говорит, что не...
C++ Locale - не верное отображение символа - разделителя тысяч для чисел
Объясните в чём может быть проблема символ - разделитель тысячной части в русской и украинской локали в консоли выглядит вместо пробела символом 'а'? // пример использования функции localeconv ...
C++ Наследование классов - не передается нужный параметр https://www.cyberforum.ru/ cpp-beginners/ thread1093305.html
Доброе утро всем! Встала не с той ноги и тут еще с кодом неполадки. Интересует такой вопрос - есть код PentagramGenerator *pentagram = new PentagramGenerator(v1, v2, v3, v4, v5); ...
C++ Как правильно выпустить проект из Visual Studio 2012 ? https://www.cyberforum.ru/ cpp-beginners/ thread1093293.html
Здравствуйте, подскажите пожалуйста как правильно выпустить проект из Visual Studio 2012 ? т.е. такая ситуация, запускаю из VS в Debug приложение работает, запускаю в ней же через Release все...
C++ Есть ли введенное число в массиве?
нужна помощь , почти завалил сессию напишите пожалуйста программу с++ которая проверяет есть ли введенное число из клавиатуры в массиве , массив должен вводится во время роботы программы
C++ Создать файл и записать в него числа последовательности, не кратные заданному числу https://www.cyberforum.ru/ cpp-beginners/ thread1093281.html
помогите ребят! #include "stdafx.h" #include <iostream> #include <ctime> #include <fstream> using namespace std; int main() { setlocale(LC_ALL, "rus");
C++ Заполнить двумерный массив с помощью rand() и вывести его Всем привет, в общем обучение идет полным ходом и столкнулся с непонятным явлением. Пытаясь заполнить двумерный массив с помощью rand() и вывести его, получаю везде одинаковые числа. Собственно ниже... https://www.cyberforum.ru/ cpp-beginners/ thread1093242.html C++ Рассчитать значение функции в заданной с консоли точке
Цель работы: изучить различные способы обработки исключений; 2) получить практические навыки программирования задач с обработкой исключений. Задание: Рассчитать значение функции в заданной с...
C++ Родительский класс неявно влияет на значение переменной наследника https://www.cyberforum.ru/ cpp-beginners/ thread1093223.html
Написал элементарную программу на тему наследования: есть родительский класс, у которого есть 2 наследника. У наследников есть свои собственные переменные. Все работает нормально. #include...
C++ Расчет CRC-16 c Revert: true https://www.cyberforum.ru/ cpp-beginners/ thread1093221.html
Добрый день. Прошу помочи с такой проблемой: сделал быстрый (т.е. с таблицей) расчет CRC для полинома 0х1021. Считает верно. Теперь пытаюсь сделать для полинома 0х8005, и не получается ввиду того,...
В массиве, все элементы которого различны, найти и удалить n наименьших элементов, «поджимая» массив к началу и сохраняя порядок следования C++
В массиве, все элементы которого различны, найти и удалить n наименьших элементов, «поджимая» массив к началу и сохраняя порядок следования
C++ Разработать шаблон класса реализующего работу с матрицами переменной размерности. Разработать шаблон класса реализующего работу с матрицами переменной размерности. Тип эле- мента задается как параметр шаблона. Написать тестовую программу. Помогите пожалуйста. https://www.cyberforum.ru/ cpp-beginners/ thread1093210.html
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
10.02.2014, 16:04 0

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

10.02.2014, 16:04. Показов 1139. Ответов 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;
}


Вернуться к обсуждению:
Одномерный массив более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент C++
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2014, 16:04
Готовые ответы и решения:

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

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

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

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

4
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2014, 16:04
Помогаю со студенческими работами здесь

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

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

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

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

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