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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
09.05.2014, 20:50     Поменять местами наибольший и наименьший элементы массива #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
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) ну или наоборот но после какого бы я ифа не ставил выдаёт не правильно, или выдаёт только одно верно; но работает только в том случае если элементы массива я ввожу в порядке возрастания. Ещё раз: на месте макс. число я должен получить наименьшее а на месте мин число мне должно выдать наибольшее.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 20:50     Поменять местами наибольший и наименьший элементы массива
Посмотрите здесь:

C++ Поменять местами наибольший и наименьший элементы?
Матрицы: найти наибольший и наименьший элементы и поменять их местами C++
C++ Найти наибольший и наименьший элементы и поменять их местами.
C++ Матрицы. Поменять местами наибольший и наименьший элементы
Поменять местами наибольший и наименьший элементы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 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;
}
Dragon.007
 Аватар для Dragon.007
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;
Если я правильно поняла задание, конечно. Нужно ведь переставить их именно в массиве?
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
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;
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
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 секунды
Сергей Сергеич уже написал
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 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;
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
09.05.2014, 21:11     Поменять местами наибольший и наименьший элементы массива #7
Цитата Сообщение от cooller Посмотреть сообщение
а не наоборот??
Что значит свежий взгляд на то, что могут написать!!!!
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
09.05.2014, 21:11     Поменять местами наибольший и наименьший элементы массива #8
cooller,
может и наоборот
у Dragon.007 взял а условие не посмотрел
Fobos315
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 строчка не нравится
Dragon.007
 Аватар для Dragon.007
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;
Fobos315
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();
bolik_81
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";
}
}
Melg
418 / 154 / 62
Регистрация: 23.09.2013
Сообщений: 306
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) от числа элементов.
Краткость, выразительность.
bolik_81
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 3
09.03.2015, 23:03     Поменять местами наибольший и наименьший элементы массива #14
Спасибо большое, ошибку нашел в тот же вечер,не прописал а[i] в уонйе программы. а поставил только а!!!
Учусь.туплю и снова учусь!!!_)))
Kant
 Аватар для Kant
25 / 25 / 8
Регистрация: 15.05.2013
Сообщений: 213
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 << " ";
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
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);
}
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
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
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
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);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2015, 08:28     Поменять местами наибольший и наименьший элементы массива
Еще ссылки по теме:

C++ Поменять местами наибольший и наименьший элементы
C++ Поменять местами наибольший и наименьший элементы
C++ Составить блок схему. Поменять местами наибольший и наименьший элементы массива

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

Или воспользуйтесь поиском по форуму:
Kant
 Аватар для Kant
25 / 25 / 8
Регистрация: 15.05.2013
Сообщений: 213
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 << " ";
Yandex
Объявления
10.03.2015, 08:28     Поменять местами наибольший и наименьший элементы массива
Ответ Создать тему
Опции темы

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