Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/88: Рейтинг темы: голосов - 88, средняя оценка - 4.81
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
1

Поменять местами наибольший и наименьший элементы массива

09.05.2014, 20:50. Показов 16045. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Есть несколько вопросов. Вот код:
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
//Даны действительные числа а1, а2,..., аn. Поменять местами наибольший и наименьший элементы.//
#include <iostream>
#include <algorithm>  
using namespace std;
int main(){
        setlocale(LC_ALL,"rus");
        int n;
        int mas[10];
       cout<<"Введите количество элементов в массиве: n=";
        cin>>n;
       cout<<"Введите массив из "<<n<<" целых чисел:"<<endl;
       
        for(int i=0; i<n; i++){
                cin>>mas[i];
                cin.ignore();
        }
        
        int max=mas[0];
        int min=mas[0];
 
        for(int i=1;i<n;i++){
        if(max>mas[i]){
                max=mas[i];
               
        }
 
        if(min<mas[i]){
                min=mas[i];
                
        }
        
}
 
        cout<<"Минимальное число "<<max<<endl;
        cout<<"Максимальное число "<<min<<endl;
        cin.get();
        
}
Теперь осталось поменять макс. и мин. элементы, мне предложили использовать swap(min,max) ну или наоборот но после какого бы я ифа не ставил выдаёт не правильно, или выдаёт только одно верно; но работает только в том случае если элементы массива я ввожу в порядке возрастания. Ещё раз: на месте макс. число я должен получить наименьшее а на месте мин число мне должно выдать наибольшее.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2014, 20:50
Ответы с готовыми решениями:

Поменять местами наибольший и наименьший элементы массива
сроки поджимают, а вчера я еще потерял флэшку с кривой и забагованной первой функцией этой...

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

Составить блок схему. Поменять местами наибольший и наименьший элементы массива
Дан массив из N элементов. Поменять местами наибольший и наименьший элементы. Вот текст моей...

Поменять местами наибольший и наименьший элементы
Ребят помогите пожалуйста. Даны действительные числа х1,...,хn (все числа попарно различны)....

18
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
09.05.2014, 20:58 2
Fobos315,
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
#include <iostream>
#include <cstdlib>
#include<ctime>
int main()
{
    srand(time(NULL));
    const size_t size = 10;
    int *arr = new int [size];
    for(size_t i=0; i<size; ++i)
        std::cout<<(arr[i] = rand()%20)<<" ";
    size_t pos_max(0),pos_min(0);
    for(size_t i=1; i<size; ++i)
    {
        if(arr[i] > arr[pos_max])
            pos_max = i;
        if(arr[i] < arr[pos_min])
            pos_min = i;
    }
    std::swap(arr[pos_max],arr[pos_min]);
    std::cout<<"\nnew array: ";
    for(size_t i=0; i<size; ++i)
        std::cout<<arr[i]<<" ";
    return 0;
}
0
3 / 3 / 0
Регистрация: 06.04.2012
Сообщений: 29
09.05.2014, 20:58 3
Fobos315, попробуй сделать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
for(int i=1;i<n;i++)
{if(max>mas[i])
     {max=mas[i];
      kmax=i;}
 
  if(min<mas[i])
    {min=mas[i];
      kmin=i;}
}
t=mas[kmax];
mas[kmax]=mas[kmin];
mas[kmin]=t;
Если я правильно поняла задание, конечно. Нужно ведь переставить их именно в массиве?
0
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,703
09.05.2014, 21:00 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
;
        int max=0;
        int min=0;
        for(int i=1;i<n;i++)
        {
            if(mas[max]>mas[i])
                max=i;
            if(mas[min]<mas[i])
                min=i;
        }
        int t=mas[min];
        mas[min]=mas[max];
        mas[max]=t;
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
09.05.2014, 21:03 5
Цитата Сообщение от Dragon.007 Посмотреть сообщение
C++
1
2
3
if(max>mas[i])
     {max=mas[i];
      kmax=i;}
можно в одну строчку( две с условием)
C++
1
2
if(mas[kmax]>mas[i])
            kmax=i;
потом по kmax вычислить максимальный

Добавлено через 42 секунды
Сергей Сергеич уже написал
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
09.05.2014, 21:04 6
Цитата Сообщение от zss Посмотреть сообщение
if(mas[max]>mas[i])
* * * * * * * * max=i;
а не наоборот??
C++
1
2
if(mas[i]>mas[max])
     max=i;
2
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,703
09.05.2014, 21:11 7
Цитата Сообщение от cooller Посмотреть сообщение
а не наоборот??
Что значит свежий взгляд на то, что могут написать!!!!
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
09.05.2014, 21:11 8
cooller,
может и наоборот
у Dragon.007 взял а условие не посмотрел
1
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
09.05.2014, 21:32  [ТС] 9
Что то всё зависло после этого)))

Добавлено через 11 минут
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
//Äàíû äåéñòâèòåëüíûå ÷èñëà à1, à2,..., àn. Ïîìåíÿòü ìåñòàìè íàèáîëüøèé è íàèìåíüøèé ýëåìåíòû.//
#include <iostream>
#include <algorithm>  
using namespace std;
int main(){
        setlocale(LC_ALL,"rus");
        int n,kmax,kmin,t,i;
        int mas[10];
       cout<<"Ââåäèòå êîëè÷åñòâî ýëåìåíòîâ â ìàññèâå: n=";
        cin>>n;
       cout<<"Ââåäèòå ìàññèâ èç "<<n<<" öåëûõ ÷èñåë:"<<endl;
       
        for(int i=0; i<n; i++){
                cin>>mas[i];
                cin.ignore();
        }
        
        int max=mas[0];
        int min=mas[0];
 
        for(int i=1;i<n;i++){
        if(max>mas[i]){
                max=mas[i];
             kmax=i;}
        }
 
        if(min<mas[i]){
                min=mas[i];
                kmin=i;}
        }
       t=mas[kmax];
       mas[kmax]=mas[kmin];
       mas[kmin]=t;
}
        cout<<"Ìàêñèìàëüíîå ÷èñëî "<<min<<endl;
        cout<<"Ìèíèìàëüíîå ÷èñëî "<<max<<endl;
        
        cin.get();
        
}
Теперь ему 31 строчка не нравится
0
3 / 3 / 0
Регистрация: 06.04.2012
Сообщений: 29
13.05.2014, 16:28 10
Прошу прощения, выше ошиблась.
Там же выше указали на ошибку))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(int i=1;i<n;i++){
        if(mas[i]>max){
                max=mas[i];
             kmax=i;}
        }
 
        if(mas[i]<min){
                min=mas[i];
                kmin=i;}
        }
       t=mas[kmax];
       mas[kmax]=mas[kmin];
       mas[kmin]=t;
0
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
13.05.2014, 16:39  [ТС] 11
Я уже разобрался, спасибо! Вот программа в идеале, может кому понадобится.
//Даны действительные числа а1, а2,..., аn. Поменять местами наибольший и наименьший элементы.//
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
#include <iostream>
#include <algorithm>  
using namespace std;
int main(){
        setlocale(LC_ALL,"rus");
        int n,i,kmax=0,kmin=0;
        int mas[10];
       cout<<"Введите количество элементов в массиве: n=";
        cin>>n;
       cout<<"Введите массив из "<<n<<" целых чисел:"<<endl;
       
        for(int i=0; i<n; i++){
                cin>>mas[i];
                cin.ignore();
        }
        
        int max=mas[0];
        int min=mas[0];
 
        for(int i=0;i<n;i++)
        {
          if(max>mas[i])
          {
             max=mas[i];
             kmax=i;
          }
        
 
          if(min<mas[i])
          {
                min=mas[i];
               kmin=i;
          }
        }
       int t=mas[kmax];
       mas[kmax]=mas[kmin];
       mas[kmin]=t;
 
        cout<<"Максимальное число "<<min<<endl;
        cout<<"Минимальное число "<<max<<endl;
         cin.get();
        
        for(int i=0; i<n; i++){
                cout<<"  \n "<<mas[i]<<endl;
        }
        cin.get();
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 3
07.03.2015, 15:37 12
Всем доброго времени суток. Вот хочу поменять в своей проге местами элементы макс и мин, но чей-то не выходит. проинспектируйте пожалуйста. Заранее спасибо!
//Изначально задача стояла - ввести массив, найти макс и мин, вывести их и после этого вывести массив с поменяными макс и мин местами//
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() 
{
int a[5],f=0,g=0,r=0,t=0,w=0;
for (int i=0; i<5; i++)
    {
    cout<<"Vvedite"<<i<<" element massiva";
    cin>>a[i];
    }
    r=a[0]; 
    for (int i=0; i<5; i++)
    {
        if (f<a[i])
        {
            f=a[i];
            g=i;
                }
            if (r>a[i])
        {
            r=a[i];
            t=i;
        }
        }
    cout<<"naibolshee chislo ravno"<<f<<" kotoroe postavleno pod nomer"<<g<<"\n";
    cout<<"naimenshee chislo ravno"<<r<<" kotoroe postavleno pod nomer"<<t<<"\n";
    w=a[g];
    a[g]=a[t];
    a[g]=w;
    for (int i=0; i<5;i++)
{
cout<<"Chislo "<<a<<"\t"<<"nomer "<<i<<"\n";
}
}
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
07.03.2015, 16:43 13
Может стоит воспользоваться стандартными алгоритмами при решении подобной задачи?

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 <vector>
#include <algorithm>
 
template <typename It>
void SwapMinAndMax(It first, It last) {
  auto position_of_min = std::min_element(first, last);
  auto position_of_max = std::max_element(first, last);
  std::swap(*position_of_min, *position_of_max);
}
 
template <typename E>
std::ostream& operator<<(std::ostream& ostream,
                         std::vector<E> const& elements) {
  for (const auto& element : elements) {
    ostream << element << " ";
  }
  return ostream;
}
 
int main() {
  std::vector<int> array = {-1, 4, 7, 0, 5, 4, 8, 4, -22, 6};
  std::cout << "Elements before swap:\n" << array;
  SwapMinAndMax(std::begin(array), std::end(array));
  std::cout << "\nElements after swap:\n" << array;
}
Пруф работоспособности:
http://ideone.com/xUuQu0

На мой взгляд программисты упускают многие возможности языка.
Сложность O(n) от числа элементов.
Краткость, выразительность.
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 3
09.03.2015, 23:03 14
Спасибо большое, ошибку нашел в тот же вечер,не прописал а[i] в уонйе программы. а поставил только а!!!
Учусь.туплю и снова учусь!!!_)))
0
37 / 37 / 18
Регистрация: 15.05.2013
Сообщений: 236
10.03.2015, 08:01 15
Если юзаем С++11, то можно и попроще сделать

C++
1
2
3
4
5
6
    std::vector<int> v = {-1, 4, 7, 0, 5, 4, 8, 4, -22, 6};
 
    auto result = std::minmax_element(v.begin(), v.end());
    swap(*result.second, *result.first);
 
    for(auto elem : v) cout << elem << " ";
0
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
10.03.2015, 08:11 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
 
int main()
{
    vector<int> v = {3,5,6,-1,4,6,10};
    auto min = min_element (v.begin(), v.end());
    auto max = max_element (v.begin(), v.end());
    swap (*min, *max);
    ostream_iterator<int> out (cout, " ");
    copy (v.begin(), v.end(), out);
}
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
10.03.2015, 08:25 17
Цитата Сообщение от Melg Посмотреть сообщение
std::swap(*position_of_min, *position_of_max);
Цитата Сообщение от MicM Посмотреть сообщение
swap (*min, *max);
Цитата Сообщение от Kant Посмотреть сообщение
swap(*result.second, *result.first);
Есть же iter_swap
2
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
10.03.2015, 08:28 18
Voivoid, спасибо. Не знал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
 
int main()
{
    vector<int> v = {3,5,6,-1,4,6,10};
    iter_swap (min_element (v.begin(), v.end()), max_element (v.begin(), v.end()));
    ostream_iterator<int> out (cout, " ");
    copy (v.begin(), v.end(), out);
}
0
37 / 37 / 18
Регистрация: 15.05.2013
Сообщений: 236
10.03.2015, 08:28 19
Voivoid, уу, сенк.

C++
1
2
3
4
5
6
    std::vector<int> v = {-1, 4, 7, 0, 5, 4, 8, 4, -22, 6};
 
    auto result = std::minmax_element(v.begin(), v.end());
    iter_swap(result.second, result.first);
 
    for(auto elem : v) cout << elem << " ";
0
10.03.2015, 08:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2015, 08:28
Помогаю со студенческими работами здесь

Поменять местами наибольший и наименьший элементы
Даны действительные числа х1,....,хn (все числа попарно различны). Поменять местами наибольший и...

Поменять местами наибольший и наименьший элементы
В общем задание было такое: (Тема одномерные массивы) Даны действительные числа а1, а2,..., аn....

Поменять местами наибольший и наименьший элементы?
Даны действительные числа а1, а2, ... an

Поменять местами наибольший и наименьший элементы
1. Даны действительные числа а1, а2, ... , аn. Поменять местами наибольший и наименьший элементы....


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru