Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
#1

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

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

Всем привет! Есть несколько вопросов. Вот код:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поменять местами наибольший и наименьший элементы массива (C++):

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

Составить блок схему. Поменять местами наибольший и наименьший элементы массива - C++
Дан массив из N элементов. Поменять местами наибольший и наименьший элементы. Вот текст моей программы...нужна блоксхема ее работы....

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

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

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

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

18
cooller
565 / 533 / 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;
}
0
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;
Если я правильно поняла задание, конечно. Нужно ведь переставить их именно в массиве?
0
zss
Модератор
Эксперт С++
6530 / 6092 / 2007
Регистрация: 18.12.2011
Сообщений: 15,843
Завершенные тесты: 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;
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,189
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
cooller
565 / 533 / 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;
2
zss
Модератор
Эксперт С++
6530 / 6092 / 2007
Регистрация: 18.12.2011
Сообщений: 15,843
Завершенные тесты: 1
09.05.2014, 21:11 #7
Цитата Сообщение от cooller Посмотреть сообщение
а не наоборот??
Что значит свежий взгляд на то, что могут написать!!!!
1
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,189
09.05.2014, 21:11 #8
cooller,
может и наоборот
у Dragon.007 взял а условие не посмотрел
1
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 строчка не нравится
0
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;
0
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();
0
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";
}
}
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
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
bolik_81
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 3
09.03.2015, 23:03 #14
Спасибо большое, ошибку нашел в тот же вечер,не прописал а[i] в уонйе программы. а поставил только а!!!
Учусь.туплю и снова учусь!!!_)))
0
Kant
33 / 33 / 9
Регистрация: 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
10.03.2015, 08:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2015, 08:01
Привет! Вот еще темы с ответами:

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

Матрицы. Поменять местами наибольший и наименьший элементы - C++
3. Дана матрица A(N,M). Поменять местами её наибольший и наименьший элементы.

Поменять местами наибольший и наименьший элементы матрицы - C++
Прошу помощи. необходимо поменять наибольший и наименьший элементы матрицы, у меня проблема #include &quot;stdafx.h&quot; #include&lt;iostream&gt; ...

Поменять местами наибольший и наименьший элементы последовательности - C++
Даны действительные числа a1, a2, ..., an. Поменять местами наибольший и наименьший элементы. Заранее премного благодарен.


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

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

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