0 / 0 / 0
Регистрация: 16.11.2016
Сообщений: 19
1

В массиве определить два элемента с мин.значениями и уменьшить массив на элементы

03.04.2017, 15:14. Показов 1256. Ответов 16
Метки нет (Все метки)

В произвольно заданном одномерном массиве определить 2 элемента с минимальными значениями и уменьшить исходный массив на элементы, расположенные между найденными значениями.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2017, 15:14
Ответы с готовыми решениями:

Массив: В заданном массиве определить два элемента с наибольшими значениями и обнулить все элементы между ними...
Помогите пожалуйста написать программу на тему одномерных массивов. Задание: В произвольно...

Определить в массиве два элемента с наибольшими значениями и два элемента с наименьшими значениями
В произвольно заданном одномерном массиве определить два элемента с наибольшими значениями и два...

В произвольно заданном одномерном массиве определить два элемента с наибольшими значениями и два с наименьшими
Очень прошу помочь) В произвольно заданном одномерном массиве определить два элемента с...

Определить в массиве два элемента с наибольшими значениями
В произвольно заданном одномерном массиве определить два элемента с наибольшими значениями и...

16
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
03.04.2017, 16:52 2
Лучший ответ Сообщение было отмечено 1Sunnygirl как решение

Решение

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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <iterator>
using namespace std;
 
int main()
{
    srand( time( 0 ) );
    int n;
    cin >> n;
 
    int miN, index;
    bool f = true;
    vector<int> vec(n);
    vector<int>::iterator it;
    for(int i=0;i<n;++i)
    {
        vec[i] = rand() % 10;
        if(!f)
        {
            if(vec[i] < miN)
            {
                miN = vec[i];
                index = i;
            }
        }
 
        if(f)
        {
            miN = vec[i];
            index = i;
            f = false;
        }
    }
 
    for(auto i : vec)
        cout << i << ends;
    cout << endl;
 
    int _miN, _index;
    f = true;
    for(int i=0;i<n;++i)
    {
        if(!f)
        {
            if(vec[i] < _miN)
            {
                if(i != index)
                {
                _miN = vec[i];
                _index = i;
                }
            }
        }
 
        if(f)
        {
            if(i != index)
            {
                _miN = vec[i];
                _index = i;
                f = false;
            }
        }
    }
 
    //cout << miN << " " << _miN << endl;
 
    if(index > _index)
        swap(index, _index);
 
    it = vec.begin();
    int i = index;
    while(index <= _index)
    {
        vec.erase(it + i);
        index++;
    }
 
    for(auto i : vec)
        cout << i << ends;
 
}
1
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 07:08 3
no swear, вылетает какой то баг периодически.
В массиве определить два элемента с мин.значениями и уменьшить массив на элементы


В массиве определить два элемента с мин.значениями и уменьшить массив на элементы
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 09:37 4
Как вариант на скорую руку
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
#include "stdafx.h"
#include <iostream>
#include <iterator>
#include <algorithm>
#include <numeric>
#include <random>
#include <iomanip>
 
using namespace std;
 
const int colv = 15;
 
void Show(vector <int> &v)
{
    copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
    cout << endl << "---------------------" << endl;
}
 
int main() {
    int min_1, min_2, K1;   
 
    vector <int> v(colv);
 
    random_device rd;
    mt19937 g(rd());
 
    iota(v.begin(), v.end(), 0);
    Show(v);
    
    shuffle(v.begin(), v.end(),g);
    Show(v);
 
    K1 = *min_element(v.begin(), v.end());
    min_1 = min_element(v.begin(), v.end()) - v.begin();
 
    min_2 = min_element(v.begin(), v.end(), [&K1](int x, int y) { return  x < y && x != K1; }) - v.begin();
 
    if (min_2 < min_1)
 
        v.erase(v.begin() + min_2 + 1, v.begin() + min_1);
    else
        v.erase(v.begin() + min_1 + 1, v.begin() + min_2);
 
    Show(v);
    system("pause");
    return 0;
}
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
04.04.2017, 14:03 5
Я понятия не имею почему у вас выходит ошибка. У меня всё работает нормально.

Чуточку подправил код
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <iterator>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    srand( time( 0 ) );
    int n;
    cin >> n;
 
    int miN, index;
    bool f = true;
    vector<int> vec(n);
    vector<int>::iterator it;
    for(int i=0;i<n;++i)
    {
        vec[i] = rand() % 15;
        if(!f)
        {
            if(vec[i] < miN)
            {
                miN = vec[i];
                index = i;
            }
        }
 
        if(f)
        {
            miN = vec[i];
            index = i;
            f = false;
        }
    }
 
    for(auto i : vec)
        cout << i << ends;
    cout << endl;
 
    int _miN, _index;
    f = true;
    for(int i=0;i<n;++i)
    {
        if(!f)
        {
            if(vec[i] < _miN)
            {
                if(i != index && vec[i] != miN)
                {
                _miN = vec[i];
                _index = i;
                }
            }
        }
 
        if(f)
        {
            if(i != index && vec[i] != miN)
            {
                _miN = vec[i];
                _index = i;
                f = false;
            }
        }
    }
 
    cout << "Первый min: " << miN << "\nВторой min: " << _miN << endl;
 
    if(index > _index)
        swap(index, _index);
 
    it = vec.begin();
    int i = index;
    while(index <= _index)
    {
        vec.erase(it + i);
        index++;
    }
 
    vec.empty()?cout << "В результате работы программы все элементы были удалены"
    :copy(vec.begin(), vec.end(), ostream_iterator<int> (cout, " "));
 
}
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 14:07 6
no swear, ошибка появляется не всегда, но иногда почему то вылетает.
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
04.04.2017, 14:13 7
Работает же
Миниатюры
В массиве определить два элемента с мин.значениями и уменьшить массив на элементы  
Изображения
 
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
04.04.2017, 14:15 8
У вас программка не правильно выводит ответ если задать такие данные
Если 0 и 1 поменять местами то ответ выходит правильным
Миниатюры
В массиве определить два элемента с мин.значениями и уменьшить массив на элементы  
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 14:25 9
Цитата Сообщение от no swear Посмотреть сообщение
У вас программка не правильно выводит ответ если задать такие данные
Чья программа? Твоя или моя ?
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
04.04.2017, 14:32 10
Цитата Сообщение от мановар Посмотреть сообщение
Чья программа? Твоя или моя ?
Ваша. Дело в том что если задать такие числа (0 2 3 4 5 6 1) то она не удаляет элементы между минимальными значениями которые равны 0 и 1 и рандом у вас выводит всё время те же значения (Блендер)
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 14:50 11
Йотой она заполняет, потом перемешивает, но каждый раз по разному. На счет
Цитата Сообщение от no swear Посмотреть сообщение
(0 2 3 4 5 6 1)
проверю, может быть. У вас в измененной программе опять баг вылетает (закономерность кажется понял, но проверю еще раз)
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
04.04.2017, 14:52 12
Цитата Сообщение от мановар Посмотреть сообщение
потом перемешивает
Ну я об этом и говорю, всё время одни и те же значения выходят после "Блендера". Может всё дело в компиляторах?
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 15:08 13
Цитата Сообщение от no swear Посмотреть сообщение
Ну я об этом и говорю, всё время одни и те же значения выходят после "Блендера"
Дак так и должно быть поскольку так и задумано. На счет
Цитата Сообщение от мановар Посмотреть сообщение
(0 2 3 4 5 6 1)
правы. выводит к стати такую же ошибку как и у вас. На счет условия задания до конца так и не понял. Надо найти 2 разных минимальных элемента или может быть один и тот же который повторяется несколько раз но является минимальным
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 15:54 14
no swear, твоя прога вылетает у меня тогда, когда один из минимальных элементов является первым в массиве.
В массиве определить два элемента с мин.значениями и уменьшить массив на элементы


В массиве определить два элемента с мин.значениями и уменьшить массив на элементы



Если у тебя все работает, то и я париться не буду. Может дело в VS. У себя косяк тоже кажется нашел. Подправлю выложу.
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 17:04 15
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
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <random>
#include <iomanip>
 
using namespace std;
 
const int colv = 15;
 
void Show(vector <int> &v)
{
    for (int i = 0; i < v.size(); ++i)
        cout << v[i] << "  ";
}
 
int main() {
    int min_1, min_2, K1, K2, n = 0;
 
    mt19937 gen(time(nullptr));
    uniform_int_distribution<> dist(-10, 10);
    vector <int> v;
    for (int i = 0; i < colv; i++)
            v.push_back(dist(gen));
            
//  vector <int> v{0,0,2,3,4,5,6,7,1 };
    
    Show(v);
    cout << endl << "---------------------" << endl;
 
    K1 = *min_element(v.begin(), v.end());
    min_1 = min_element(v.begin(), v.end()) - v.begin();
    cout << "Min. element 1 = " << K1 << "\t" << " poz ---> " << min_1 << endl;
 
    if (K1 == v[0])
    {
         n = 1;
        while (K1 == v[n])
            n++;
    }
 
    K2 = *min_element(v.begin() + n, v.end(), [&K1](const int &x, const int &y) { return  x < y && x != K1; });
    min_2 = min_element(v.begin() + n, v.end(), [&K1]( int x, int y) { return  x < y && x != K1; }) - v.begin();
    cout << "Min. element 2 = " << K2 << "\t" << " poz ---> " << min_2 << endl;
 
    if (min_2 < min_1)
 
        v.erase(v.begin() + min_2 + 1, v.begin() + min_1);
    else 
        v.erase(v.begin() + min_1 + 1, v.begin() + min_2);
        
    Show(v);
 
    system("pause");
    return 0;
}
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
04.04.2017, 17:49 16
Цитата Сообщение от мановар Посмотреть сообщение
На счет условия задания до конца так и не понял. Надо найти 2 разных минимальных элемента или может быть один и тот же который повторяется несколько раз но является минимальным
Мне тоже непонятны условия поэтому нахожу два разных по значению минимума и удаляю элементы между ними включая сами минимумы. Ну это уже вопросы к Автору темы
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
04.04.2017, 18:01 17
Согласен.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2017, 18:01
Помогаю со студенческими работами здесь

В одномерном массиве определить два элемента с наибольшими значениями
помогите решить пожалуйста в произвольном заданном одномерном массиве определить два элемента с...

В одномерном массиве определить два элемента с минимальными значениями
В произвольно заданном одномерном массиве определить два элемента с минимальными значениями и...

Определить два элемента с наибольшими значениями и два элемента с наименьшими значениями
В произвольно заданном одномерном массиве определить два элемента с наибольшими значениями и два...

Массив: Определить, есть ли в заданном массиве элементы с одинаковыми значениями...
Введите массив из 20 элементов и определите, есть ли в нем элементы с одинаковыми значениями

В массиве уменьшить все элементы между двумя отрицательными значениями
Задание такое: Дан массив из N вещественных чисел. Все элементы, расположенные между первым и...

Уменьшить массив на элементы расположенные между двумя элементами с минимальными значениями
В произвольно заданном одномерно массиве определить два элемента с минимальными значениями и...


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

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

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