Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51
1

Найти минимальный и максимальный элементы в массиве, поменять их местами (код не всегда работает)

04.12.2018, 00:43. Показов 1237. Ответов 6
Метки нет (Все метки)

Найти мини и максим элементы в массиве, поменять их местами
меняет не всегда, работает в небольших массивах. Сам пока понять не смог.

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
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace  std;
int main()
{
    setlocale(0, "Russian");
                srand (time(nullptr));
    int min_p, max_p;   //
                int n; // 
       cout << "Enter сount: ";
       cin >> n;
       cout << "Array: "<<endl;
       int *a = new int [n];
       for (int i=0; i<n; i++)
       {
                                               a[i]=rand()%11-5; // з
            cout << a[i]<<" "; //
       }
                   cout << endl;
                               for (int i=0; i<n-1; i++)
                               {
                                               int min_p=0, max_p=0;                               // 
                                               for (int j=i+1; j<n; j++)
                                               {
                                                               if (a[min_p]>a[j]) // 
                                                                              min_p=j; // 
                                                               else if (a[max_p]<a[j])// 
                                        max_p=j;
                                                                              
                                               }
                                               swap (a[min_p], a[max_p]);
                               }
                               cout << endl;
                               cout <<"Sorted array"<<endl;
                               for (int i=0; i<n; i++)
      cout << a[i]<<" ";
                   cout << endl;
                system ("pause");
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2018, 00:43
Ответы с готовыми решениями:

Найти в массиве максимальный и минимальный элементы и поменять их местами
Помогите разобраться Дан массив целых чисел. Найти в нем максимальный и минимальный элементы и...

Найти и поменять местами максимальный и минимальный элементы в массиве
Всем привет! У меня тут возникла проблема с выполнением задания, сама не справляюсь :( Задание:...

Найти в массиве максимальный и минимальный элементы и поменять их местами
uses crt; var min,max,z:integer; procedure minmax(var min,max:integer); var a:array of integer;...

Найти в массиве минимальный и максимальный элементы и поменять их местами
Помогите пожалуйста, пришёл с армии восстановился забыл многое Найти в массиве G минимальный и ...

6
6473 / 4403 / 2521
Регистрация: 18.12.2017
Сообщений: 13,769
04.12.2018, 02:25 2
Лучший ответ Сообщение было отмечено VoronReki как решение

Решение

поменяет все минимумы на максимумы и все максимумы на минимумы:
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>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n;
    cout <<"n="; cin >>n;
 
    double*a = new double[n], min=0.0, max=0.0;
 
    for (int i = 0; i < n; i++)
      {
      a[i]=rand()%9 + 1;
      if (i==0 || a[i]<min) min=a[i];
      if (i==0 || a[i]>max) max=a[i];
      cout <<a[i]<<" ";
      }
    cout <<endl;
    cout <<"min="<<min<<"\nmax="<<max<<"\n";
    
    for (int i = 0; i < n; i++)
    {
    if (a[i]==min) a[i]=max;
    else if (a[i]==max) a[i]=min;
    cout <<a[i]<<" ";   
    }
    cout << endl;
    
    delete[]a;
system("pause");
return 0;
}
0
3413 / 2772 / 751
Регистрация: 25.03.2012
Сообщений: 10,080
Записей в блоге: 1
04.12.2018, 08:21 3
VoronReki, ты поиск походу с сортировкой перепутал. Зачем тебе двойной вложенный цикл тут? Ну явно же копипаст из алгоритма сортировки!
0
0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51
04.12.2018, 22:25  [ТС] 4
А можете объяснить кое-чего вот в этом куске кода? Часть понятна, а часть не понял.
Цитата Сообщение от Yetty Посмотреть сообщение
for (int i = 0; i < n; i++)
* * * {
* * * a[i]=rand()%9 + 1;
* * * if (i==0 || a[i]<min) min=a[i];
* * * if (i==0 || a[i]>max) max=a[i];
* * * cout <<a[i]<<" ";
* * * }
C++
1
2
3
4
5
6
7
for (int i = 0; i < n; i++) // начало цикла
* * * {
* * * a[i]=rand()%9 + 1;        // заполнение с помощью рандома
* * * if (i==0 || a[i]<min) min=a[i]; // вот это прочитал (если i равно 0 или а[i] меньше мин, то мин равно a[i])но не понял для чего. То есть он в цикле сравнивает каждый элемент с min, но не пока не выводит его? Вывод ниже будет? Правильно?
* * * if (i==0 || a[i]>max) max=a[i]; // вот это прочитал, но не понял для чего
* * * cout <<a[i]<<" ";
* * * }
0
3413 / 2772 / 751
Регистрация: 25.03.2012
Сообщений: 10,080
Записей в блоге: 1
04.12.2018, 22:29 5
VoronReki, а зачем выводить непроверенный до конца min в ЦИКЛЕ блин?!!?!!
В цикле? OMG
Зачем?, чтобы в среднем полмассива, попадающих под это условие чисел, тебе печаталось на экране, вместо одного минимального??

Короче, есть одно простое правило в изучении программирования: "не понимаешь почему ТАК? - Сделай наоборот и запусти!", - ты не ядерный реактор строишь, можно и нужно учиться на ошибках!
0
Yetty
04.12.2018, 22:45
  #6

Не по теме:

VoronReki, на первой итерации цикла (при i=0) определяется первый текущий минимум (min) a[0]. на второй - a[1] сравнивается с a[0]. если a[1]<a[0] текущим минимумом (min) становится a[1] (если a[1]>=a[0] текущим минимумом остаётся a[0]). так проверяются все элементы и в переменной min после завершения цикла остаётся значение минимального элемента.

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

на min=0.0 не обращайте внимание, переменная может быть изначально инициализирована любым числом (в том числе и нулём. для типа double ноль это 0.0).

такая запись будет работать для любого массива (не только из положительных чисел)

0
0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51
04.12.2018, 22:49  [ТС] 7
Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2018, 22:49

Найти в массиве максимальный и минимальный элементы по модулю и поменять их местами
Вот решаю задачу по Си++, но так как дома среды разработки такой нет , то решаю задачу по Си......

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

В массиве целых чисел найти минимальный и максимальный элементы и поменять их местами
помогите пожалуйста написать это на C В массиве целых чисел найти Минимальный и максимальный...

В массиве целых чисел найти минимальный и максимальный элементы и поменять их местами
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #include &lt;stdlib.h&gt; int main() {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.