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

Найти первый элемент на котором нарушился порядок размещения элементов массива по убыванию

22.11.2020, 02:40. Показов 882. Ответов 16
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
нужно найти первый элемент на котором нарушился порядок размещения элементов массива по убыванию(без сортировок) :
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int n = 10;
    int arr[n], k = 0;
    
    cout << "\t\t\t\tВвод "<<n<<" элементов массива:\n";
    
    for (int i = 0; i < n; i++)
    {
        cout << "Введите " << i+1 << " элемент массива:";
    
 
        cin >> arr[i];
        if (arr[i] > 0 && i % 2 != 0) { k++; }
        
    }
    
    cout << "Количество позитивных элементов на непарных местах массива: " << k << endl;
    
    cout << "Первый элемент на котором нарушился порядок размещения элементов по уменьшению:";
    system("pause");
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.11.2020, 02:40
Ответы с готовыми решениями:

Найти первый столбец в котором нет отрицательных элементов, отсортировать элементы столбцов по убыванию
Задание такое, найти первый столбец в котором не содержится отрицательных элементов, и еще отсортировать элементы столбцов по убыванию(...

В матрице найти количество чётных элементов. Вывести на печать первый столбец массива, отсортированный по убыванию
В массиве А найти количество чётных элементов. Вывести на печать первый столбец массива, отсортированный по убыванию.

Найти наименьший чётный элемент массива, если такого нет, то вывести первый элемент; подсчитать сумму нечётных элементов
Сделайте так что бы размер массива водился с клавиатуры Добавлено через 1 минуту Найдите наименьший четный элемент массива. Если...

16
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.11.2020, 04:43
tinan, старайтесь что-то делать самостоятельно. пишите в отдельном цикле: если текущий элемент a[i] меньше следующего, запоминаем его и завершаем цикл (break)
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
22.11.2020, 13:08
Первый элемент, на котором нарушился нисходящий порядок сортировки:

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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <random>
#include <functional>
 
int main()
{
    std::size_t n;
    std::cout << "Input size of the array: ";
    std::cin >> n;
 
    if (n < 1)
    {
        std::cerr << "Invalid size. Terminating..." << std::endl;
        return 1;
    }
 
    std::vector<int> v(n);
 
    std::mt19937 gen{ std::random_device{}() };
    std::uniform_int_distribution<> dist(-20, 20);
    std::generate(v.begin(), v.end(), std::bind(dist, gen));
 
    std::cout << "Initial array: ";
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    std::sort(v.begin(), v.end(), std::greater<int>());
 
    std::cout << "Sorted initial array: ";
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    std::shuffle(v.begin(), v.end(), gen);
 
    std::cout << "Shuffled initial array: ";
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    auto first_unsorted_it = std::is_sorted_until(v.begin(), v.end(), std::greater<int>());
    auto first_unsorded_ix = std::distance(v.begin(), first_unsorted_it);
 
    if (first_unsorted_it != v.end())
    {
        std::cout << "First unsorted element is " << *first_unsorted_it << std::endl;
        std::cout << "Its index is " << first_unsorded_ix << std::endl;
    }
    else
        std::cout << "All elements are sorted" << std::endl;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 82
23.11.2020, 11:04  [ТС]
переписал код, но все равно выводит неправильные значение : тоесть показывает правильны ответ только тогдаЮ, когда число, которое нарушило порядок идет сразу после нормального ряда
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
#include <iostream>
 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int n = 10;
    int arr[n], a = 0, b = 0;
 
    cout << "\t\t\t\tВвод " << n << " элементов массива:\n";
 
    for (int i = 0; i < n; i++)
    {
        cout << "Введите " << i + 1 << " элемент массива:";
        cin >> arr[i];
 
    }
 
 
    int i = 0;
    while (arr[i]>arr[i+ 1])
    {
        i++;
        break;
    }
 
    if (arr[i] < arr[i + 1])
 
        cout << "3)Первый элемент на котором нарушился порядок размещения элементов по уменьшению:" << arr[i + 1] << " ( индекс: " << i + 1 << ", место:" << i + 2 << ")" << endl;
 
    system("pause");
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2020, 11:10
tinan, выкладывайте вариант своего кода с max_mod и циклом for
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 82
23.11.2020, 11:14  [ТС]
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int n = 10;
    int arr[n], a = 0, b = 0;
 
    cout << "\t\t\t\tВвод " << n << " элементов массива:\n";
 
    for (int i = 0; i < n; i++)
    {
        cout << "Введите " << i + 1 << " элемент массива:";
        cin >> arr[i];
        if (arr[i] > 0 && i % 2 == 0)
        {
            a++;
        }
    
    }
 
 
    cout << "1)Количество положительных элементов на непарных местах массива: " << a << endl;
        
 
        int max_mod = arr[0], sum = 0;
 
    for (int i = 0; i<n; i++)
    {
 
        if (abs(arr[i])>max_mod)
            max_mod = abs(arr[i]);
    }
    int c = 0;
    for (int i = 0; i < n; i++)
    {
        
        if (abs(max_mod) == abs(arr[i]))
            c++;
        sum = max_mod*c;
    }
 
    cout << "2)Сумма максимальных по модулю элементов массива: " << sum << endl;
 
for (int i=0; i<n; i++){
if (arr[i] < arr[i + 1])
        cout << "3)Первый элемент на котором нарушился порядок размещения элементов по уменьшению:" << arr[i + 1] << " ( индекс: " << i + 1 << ", место:" << i + 2 << ")" << endl;
 
    break;
}
    system("pause");
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2020, 11:27
зачем находить модуль
Цитата Сообщение от tinan Посмотреть сообщение
if (abs(max_mod)
если max_mod само по себе значение по модулю
Цитата Сообщение от tinan Посмотреть сообщение
max_mod = abs(arr[i])
так неправильно:
Цитата Сообщение от tinan Посмотреть сообщение
c++;
        sum = max_mod*c;
не будут учитываться отрицательные, считайте сумму непосредственно

Цитата Сообщение от tinan Посмотреть сообщение
for (int i=0; i<n; i++){
if (arr[i] < arr[i + 1])
выход за границы массива при i=n-1

Добавлено через 3 минуты
Цитата Сообщение от tinan Посмотреть сообщение
break;
относится к if
C++
1
2
for (int i = 0; i < n-1; i++)
    if (arr[i] < arr[i + 1]) {index=i+1;break;}
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 82
23.11.2020, 11:35  [ТС]
можете объяснить про выход за границы массива( я понимаю что это значит), но почему здесь должно быть именно так?почему нельзя оставить i<n? спасибо за ранние ответы
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2020, 11:40
tinan, при i=n-1
arr[i + 1]=arr[n - 1 + 1]=arr[n] // такого элемента в массиве нет (выход за границы)

внесите правки учитывая сказанное выше и сбросьте код для проверки
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 82
23.11.2020, 11:43  [ТС]
при ряде чисел (-10 1 2 10 1 3 4 5 6 7) не может подсчитать первый элемент, который нарушает порядок убывания:
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int n = 10;
    int arr[n], a = 0, b = 0;
 
    cout << "\t\t\t\tВвод " << n << " элементов массива:\n";
 
    for (int i = 0; i < n; i++)
    {
        cout << "Введите " << i + 1 << " элемент массива:";
        cin >> arr[i];
        if (arr[i] > 0 && i % 2 == 0)
        {
            a++;
        }
    
    }
 
 
    cout << "1)Количество положительных элементов на непарных местах массива: " << a << endl;
        
 
        int max_mod = arr[0], sum = 0;
 
    for (int i = 0; i<n; i++)
    {
 
        if (abs(arr[i])>max_mod)
            max_mod = abs(arr[i]);
    }
    int c = 0;
    for (int i = 0; i < n; i++)
    {
        
        if (abs(max_mod) == abs(arr[i]))
            c++;
        sum = max_mod*c;
    }
 
    cout << "2)Сумма максимальных по модулю элементов массива: " << sum << endl;
int index;
for (int i=0; i<n-1; i++){
if (arr[i] < arr[i + 1]){index=i+1;break;}
break;
        cout << "3)Первый элемент на котором нарушился порядок размещения элементов по уменьшению:" << arr[i + 1] << " ( индекс: " << i + 1 << ", место:" << i + 2 << ")" << endl;
 
    
}
    system("pause");
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2020, 11:54
tinan, я для кого написал всё выше ? внесите правки, потом продолжим разговор
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 82
23.11.2020, 12: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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int n = 10;
    int arr[n], a = 0, b = 0;
 
    cout << "\t\t\t\tВвод " << n << " элементов массива:\n";
 
    for (int i = 0; i < n; i++)
    {
        cout << "Введите " << i + 1 << " элемент массива:";
        cin >> arr[i];
        if (arr[i] > 0 && i % 2 == 0)
        {
            a++;
        }
    
    }
 
 
    cout << "1)Количество положительных элементов на непарных местах массива: " << a << endl;
        
 
        int max_mod = arr[0], sum = 0;
 
    for (int i = 0; i<n; i++)
    {
 
        if (abs(arr[i])>max_mod)
            max_mod = abs(arr[i]);
            
    }
    for (int i = 0; i<n; i++)
    {
       if (abs(arr[i]==abs(arr[i+1])))
        sum=arr[i]+arr[i+1];
    }
 
    cout << "2)Сумма максимальных по модулю элементов массива: " << sum << endl;
int index;
for (int i=0; i<n-1; i++)
{
if (arr[i] < arr[i + 1]){index=i+1;break;}
break;
        cout << "3)Первый элемент на котором нарушился порядок размещения элементов по уменьшению:" << arr[i + 1] << " ( индекс: " << i + 1 << ", место:" << i + 2 << ")" << endl;
 
    
}
    system("pause");
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2020, 12:20
что-то Вы уже совсем всё перепутали
Цитата Сообщение от tinan Посмотреть сообщение
for (int i = 0; i<n; i++)
    {
       if (abs(arr[i]==abs(arr[i+1])))
        sum=arr[i]+arr[i+1];
    }
C++
1
2
for (int i = 0; i < n; i++)    
   if (abs(arr[i])==max_mod) sum_max_mod+=arr[i];
уберите break в строке 48 и вынесите cout из цикла
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 82
23.11.2020, 12:28  [ТС]
еще хотелось бы уяснить зачем добавлять переменную index?
код :
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int n = 10;
    int arr[n], a = 0, b = 0;
 
    cout << "\t\t\t\tВвод " << n << " элементов массива:\n";
 
    for (int i = 0; i < n; i++)
    {
        cout << "Введите " << i + 1 << " элемент массива:";
        cin >> arr[i];
        if (arr[i] > 0 && i % 2 == 0)
        {
            a++;
        }
    
    }
 
 
    cout << "1)Количество положительных элементов на непарных местах массива: " << a << endl;
        
 
        int max_mod = arr[0], sum = 0;
 
    for (int i = 0; i<n; i++)
    {
 
        if (abs(arr[i])>max_mod)
            max_mod = abs(arr[i]);
            
    }
    for (int i = 0; i<n; i++)
    {
       if (abs(arr[i])==max_mod) 
       sum+=arr[i];
 
     }
    cout << "2)Сумма максимальных по модулю элементов массива: " << sum << endl;
int index, i=0;
for (int i=0; i<n-1; i++)
{
if (arr[i] < arr[i + 1]){index=i+1;break;}
}
        cout << "3)Первый элемент на котором нарушился порядок размещения элементов по уменьшению:" << arr[i + 1] << " ( индекс: " << i + 1 << ", место:" << i + 2 << ")" << endl;
 
    
 
    system("pause");
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2020, 12:43
Цитата Сообщение от tinan Посмотреть сообщение
еще хотелось бы уяснить зачем добавлять переменную index?
элемент нужно как-то запомнить - то есть или вводить переменную для самого элемента или для его индекса. для индекса лучше, потому что элемент можно вывести более красиво:
C++
1
cout << "a[" << index << "]=" << a[index] << "\n";
Добавлено через 2 минуты
Цитата Сообщение от tinan Посмотреть сообщение
int index, i=0;
C++
1
int index=0;
Добавлено через 3 минуты
строки 33-34 лучше поставить в первый цикл, предварительно инициализировав max_mod нулём
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 82
23.11.2020, 13:36  [ТС]
если ввожу массив (10 9 8 7 6 5 4 3 2 1), то выводит что нарушение на arr[0]=10, но это же неправильно? как исправить ? еще один иф добавить ?
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int n = 10;
    int arr[n], a = 0;
 
    cout << "\t\t\t\tВвод " << n << " элементов массива:\n";
 
    for (int i = 0; i < n; i++)
    {
        cout << "Введите " << i + 1 << " элемент массива:";
        cin >> arr[i];
        if (arr[i] > 0 && i % 2 == 0)
        {
            a++;
        }
    
    }
 
 
    cout << "1)Количество положительных элементов на непарных местах массива: " << a << endl;
        
 
        int max_mod = arr[0], sum = 0;
 
    for (int i = 0; i<n; i++)
    {
 
        if (abs(arr[i])>max_mod)
            max_mod = abs(arr[i]);
            
    }
    for (int i = 0; i<n; i++)
    {
       if (abs(arr[i])==max_mod) 
       sum+=arr[i];
 
     }
    cout << "2)Сумма максимальных по модулю элементов массива: " << sum << endl;
int index=0, i=0;
for (int index=0; index<n-1; index++)
{
if (arr[index] < arr[index + 1]){index=i+1;break;}
}
 
        cout << "3)Первый элемент на котором нарушился порядок размещения элементов по уменьшению:" << "arr[" << index << "]=" << arr[index] << "\n";
 
 
    system("pause");
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.11.2020, 14:34
tinan, зачем Вы поменяли i на index ? переменная index только для запоминания:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{    
    const int n=10;
    int a[n]={10,9,8,7,6,5,4,3,2,1}; 
    
    int index=0;
    for (int i = 0; i < n-1; i++)    
        if (a[i] < a[i + 1]) {index=i+1;break;}
 
    if(index!=0) cout << "a[" << index << "]=" << a[index] << "\n";
    else cout << "Such elements are absent\n"; 
 
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.11.2020, 14:34
Помогаю со студенческими работами здесь

Найти первый отрицательный элемент массива, сумму четных элементов массива
Одномерный массив А длиной N&lt;=50 заполнить случайными числами из диапазона . Составить программу определения: • первого отрицательного...

Найти минимальный и максимальный элементы массива и заменить первый элемент массива суммой минимального и максимального элементов
Доброго времени суток.. Случилось так, что требуется решить 2 задачи в ВБА на массивы, которые я никогда не изучал..Нужно решение для...

Найти первый отрицательный элемент массива и первый положительный элемент и поменять их местами
Найти первый отрицательный элемент массива и первый положительный элемент и поменять их местами.

Найти сумму элементов столбца, в котором расположен наибольший элемент массива
Дана матрица порядка 5х5. Найти сумму элементов столбца,в котором расположен единственный элемент с наибольшем значением. Процедурка...

Дан массив X[N]. Найти сумму элементов массива если первый элемент положительный, иначе найти произведение
Program SUMMA / PROIZVEDENIE; VAR X:array of INTEGER; S,P,i,n: integer; BEGIN write('введите размерность...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru