Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
TribePu
0 / 0 / 0
Регистрация: 16.02.2018
Сообщений: 2
1

Найти максимальный и минимальный элемент в каждой строке массива и поменять местами с первым и последним элементом

16.02.2018, 14:08. Просмотров 385. Ответов 3

Дана матрица M*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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//---------------------------------------------------------------------------
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
#pragma argsused
int main()
{
srand(time(0));
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int N, M, min,max, nMin=0, nMax=0, temp, temp1;
printf("Введите матрицу A[M][N]");
printf("\n M=");
scanf("%d", &M);
printf("N=");
scanf("%d", &N);
int **mas = new int* [M]; //строки
 for (int a = 0; a < M; a++)
        mas[a] = new int[N]; //столбцы
 for(int i = 0; i < M; i++)
        for(int j = 0; j < N; j++)
                {
                mas[i][j]= rand()%100;   //заполнение
                }
 for(int i=0;i < M;i++)    //вывод
        {
        for(int j =0;j < N; j++)
        cout<< "" << mas[i][j]<<"   ";
        cout<< endl;
  }
 cout<<"\n";
 cout<<"Измененный массив"<<'\n';
for (int i=0; i < M; i++)
    {
    max = mas[i][0];
    min = mas[i][0];
    for (int j = 0; j < N; j++)
        {
        if (mas[i][j] < min)
        {
            min = mas[i][j];
            nMin = j;
        }
        if (mas[i][j] > max)
        {
            max = mas[i][j];
            nMax = j;
        }
    }
temp1=mas[i][0]; //запоминаю 1 элемент в строке
temp=mas[i][N-1]; //запоминаю послдний элемент в строке
mas[i][0]=mas[i][nMin]; //заменяю 1 элемент на минимальный
mas[i][nMin]=temp1;     //заменяю минимальный элемент на 1
mas[i][N-1]=mas[i][nMax]; //тоже самое для максимального
mas[i][nMax] = temp;
nMin = 0;
nMax = 0;
temp1=0;
temp=0;
}
 for(int i=0;i < M;i++)    //вывод
        {
        for(int j =0;j < N; j++)
        cout<< "" <<mas[i][j]<<"   ";
        cout<< endl;
        }
  system("pause");
  return 0;
}
Пример работы показал в скринах. Видно что первую (иногда и 2-ю) строчку преобразует нормально. А дальше идет сбой, не понимаю почему.
0
Миниатюры
Найти максимальный и минимальный элемент в каждой строке массива и поменять местами с первым и последним элементом   Найти максимальный и минимальный элемент в каждой строке массива и поменять местами с первым и последним элементом  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2018, 14:08
Ответы с готовыми решениями:

Найти в каждой строке максимальный и минимальный элементы и поменять их местами с первым и последним элементом
3. Дана матрица B размерностью n×m. Найти в каждой строке матрицы максимальный и минимальный...

Найти в каждой строке матрицы максимальный и минимальный элементы и поменять их местами с первым и последним элементом
Я решила задачку но что-то не так(ошибки никак не исправлю... помогите исправте ошибки,что не...

Поменять местами минимальный элемент с первым элементом массива, а максимальный элемент с последним
Здравствуйте. Помогите пожалуйста написать программу: для поиска минимального и максимального...

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

Поменять местами максимальный элемент матрицы с его первым элементом а минимальный с последним
ДВУМЕРНЫЙ МАССИВ: Поменять местами максимальный элемент матрицы F(k,p)в его первым элементом, а...

3
Hitoku
1720 / 1316 / 1404
Регистрация: 28.10.2016
Сообщений: 4,265
Завершенные тесты: 4
16.02.2018, 19:15 2
Как вариант
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
#include <iostream>
#include <random>
 
void Print(int** a, int n, int m) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            std::cout << a[i][j] << "\t";
        std::cout << "\n";
    }
}
 
int FindMax(int** a, int i, int m) {
    int jmax = 0;
    for (int j = 1; j < m; j++)
        if (a[i][j] > a[i][jmax]) jmax = j;
    return jmax;
}
 
int FindMin(int** a, int i, int m) {
    int jmin = 0;
    for (int j = 1; j < m; j++)
        if (a[i][j] < a[i][jmin]) jmin = j;
    return jmin;
}
 
int main()
{
    std::default_random_engine gen{ std::random_device()() };
    std::uniform_int_distribution<> dist(-10, 10);
    int n, m; std::cin >> n >> m;
    int** a = new int*[n];
    for (int i = 0; i < n; i++) {
        a[i] = new int[m];
        for (int j = 0; j < m; j++)
            a[i][j] = dist(gen);
    }
    Print(a, n, m);
    for (int i = 0; i < n; i++) {
        std::swap(a[i][0], a[i][FindMax(a, i, m)]);
        std::swap(a[i][m - 1], a[i][FindMin(a, i, m)]);
    }
    std::cout << "New matrix:\n";
    Print(a, n, m);
    for (int i = 0; i < n; i++)
        delete[] a[i];
    delete[] a;
    system("pause");
    return 0;
}
0
TribePu
0 / 0 / 0
Регистрация: 16.02.2018
Сообщений: 2
16.02.2018, 19:32  [ТС] 3
Hitoku, решил уже. Но спасибо) Я просто не учел, что у меня максимальный или минимальный элемент могут стоять на месте первого или последнего элемента.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//---------------------------------------------------------------------------
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
#pragma argsused
int main()
{
srand(time(0));
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int N, M, min,max, nMin=0, nMax=0, temp2, temp1;
printf("Введите матрицу A[M][N]");
printf("\n M=");
scanf("%d", &M);
printf("N=");
scanf("%d", &N);
int **mas = new int* [M]; //строки
 for (int a = 0; a < M; a++)
        mas[a] = new int[N]; //столбцы
 for(int i = 0; i < M; i++)
        for(int j = 0; j < N; j++)
                {
                mas[i][j]= rand()%100;   //заполнение
                }
 for(int i=0;i < M;i++)    //вывод
        {
        for(int j =0;j < N; j++)
        cout<< "" << mas[i][j]<<"   ";
        cout<< endl;
  }
 cout<<"\n";
 cout<<"Измененный массив"<<'\n';
for (int i=0; i < M; i++)
    {
    max = mas[i][0];
    min = mas[i][0];
    for (int j = 0; j < N; j++)
        {
        if (mas[i][j] < min)
        {
            min = mas[i][j];
            nMin = j;
            //cout<<"МИН в строке"<<nMin<<endl;
        }
        if (mas[i][j] > max)
        {
            max = mas[i][j];
            nMax = j;
            //cout<<"МАХ в строке"<<nMax<<endl;
        }
    }
temp1=mas[i][0];
temp2=mas[i][N-1];
if(temp2==mas[i][nMin])
{
mas[i][0]=mas[i][nMin]; //заменяю 1 элемент на минимальный
mas[i][N-1]=temp1;     //заменяю минимальный элемент на 1
mas[i][N-1]=mas[i][nMax]; //тоже самое для максимального
mas[i][nMax] =temp1;
}
else if(temp1==mas[i][nMax])
{
mas[i][N-1]=mas[i][nMax];
mas[i][0]=temp2;
mas[i][0]=mas[i][nMin];
mas[i][nMin]=temp2;
}
else
{
mas[i][0]=mas[i][nMin];
mas[i][nMin]=temp1;
mas[i][N-1]=mas[i][nMax];
mas[i][nMax]=temp2;
}
nMin = 0;
nMax = 0;
temp1=0;
temp2=0;
}
 for(int i=0;i < M;i++)    //вывод
        {
        for(int j =0;j < N; j++)
        cout<< "" <<mas[i][j]<<"   ";
        cout<< endl;
        }
  system("pause");
  return 0;
}
//---------------------------------------------------------------------------
0
Hitoku
1720 / 1316 / 1404
Регистрация: 28.10.2016
Сообщений: 4,265
Завершенные тесты: 4
16.02.2018, 19:37 4
Ну если максимальный стоит на первой позиции, то ничего критичного не случится - он "поменяется местами" сам с собой. Аналогично с минимальным
0
16.02.2018, 19:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2018, 19:37

Найти первый максимальный элемент и поменять его местами с последним элементом массива
Задача: Сформируйте массив из 6 элементов, организовав ввод данных с консоли. Подсчитайте сумму...

Найти максимальный элемент массива и поменять его местами с первым положительным элементом
Здравствуйте. Есть задание Дан массив чисел а0, а1, …, а15. Найти максимальный элемент этого...

Найти максимальный и минимальный элемент в каждой строке матрицы и поменять их местами
Дана матрица вещественных чисел N х М. Количество строк N и столбцов М задается пользователем....


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

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

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