Форум программистов, компьютерный форум CyberForum.ru

Удалить элементы между максимальным и минимальным - C++

Восстановить пароль Регистрация
 
cattyfil
4 / 4 / 1
Регистрация: 29.11.2012
Сообщений: 28
08.03.2013, 20:13     Удалить элементы между максимальным и минимальным #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
int main()
{    int X[100],i,n,j,max,maxi,min,mini,razn; 
    cout << "vvedite kol-vo elementov" << endl;
    cin >> n;
 
    for (i=0;i<n;i++){ //ввод массива
       cin>>X[i];}
 
for (max=X[0],i=maxi=0;i<n;i++){ //n-число элементов массива
        if (max<X[i])  {
            max=X[i]; maxi=i;//минимум и индекс максимального элемента
        }
    }
    
    for (min=X[0],i=mini=0;i<n;i++){
        if (min>X[i])  {
            min=X[i];mini=i;//максимум, индекс минимального элемента
        }
    }
 
if (maxi>mini) //если минимальный элемент раньше 
{razn=maxi-mini-1;//разность между индексами макс и мин элементов,узнаем,
  //сколько элементов удалить
   for (j=1;j<=razn;j++) //главный цикл, удаляем razn элементов
  { for (i=mini;i<maxi;i++){ //удаляем с меньшего индекса до большего,если 
 //минимальный элемент раньше
        X[i]=X[i+1];
        n--;
      }
  }} else { //аналогично если максимальный элемент раньше
   razn=mini-maxi-1;
   for (j=1;j<=razn;j++)
  { for (i=maxi;i<mini;i++){
        X[i]=X[i+1];
        n--;
      }
  }}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2013, 20:13     Удалить элементы между максимальным и минимальным
Посмотрите здесь:

Обнулить элементы массива, расположенные между его минимальным и максимальным элементами C++
Файлы. Удалить все числа между первым максимальным и последним минимальным числом C++
Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами C++
C++ Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами
Переставить в обратном порядке элементы массива, расположенные между минимальным и максимальным элементами C++
Вывести элементы массива расположенные между максимальным и минимальным элементами C++
Обнулить элементы массива, расположенные между его минимальным и максимальным элементам C++
Перегрузка функций. Переставить элементы между минимальным и максимальным в обратном порядке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
08.03.2013, 20:38     Удалить элементы между максимальным и минимальным #2
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 <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
#include <random>
#include <ctime>
 
int main ()
{
    auto fRandom = std::bind(std::uniform_int_distribution <> (0, 25),
                             std::default_random_engine (time(nullptr)));
 
    int vectorSize;
    std::cout << "Enter the size of vector: ";
    std::cin >> vectorSize;
 
    std::vector <int> vector (vectorSize);
    std::cout << "Vector: " << std::endl;
    std::generate(vector.begin(), vector.end(), [&fRandom] () -> int {
        return fRandom();
    });
    std::copy(vector.begin(), vector.end(), std::ostream_iterator <int> (std::cout, " "));
 
    int maximalIndex = (std::distance(vector.begin(), std::max_element(vector.begin(), vector.end())));
    int minimalIndex = (std::distance(vector.begin(), std::min_element(vector.begin(), vector.end())));
    std::cout << std::endl << "Position of minimal: " << minimalIndex << "; Position of maximal: " << maximalIndex << ";\n";
 
    std::cout << "Vector: " << std::endl;
    if (minimalIndex > maximalIndex)
        std::swap(minimalIndex, maximalIndex);
    vector.erase(vector.begin() + (++minimalIndex), vector.begin() + maximalIndex);
    std::copy(vector.begin(), vector.end(), std::ostream_iterator <int> (std::cout, " "));
 
    return 0;
}
Миниатюры
Удалить элементы между максимальным и минимальным  
Yandex
Объявления
08.03.2013, 20:38     Удалить элементы между максимальным и минимальным
Ответ Создать тему
Опции темы

Текущее время: 14:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru