-12 / 0 / 0
Регистрация: 08.10.2016
Сообщений: 39
1

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

16.02.2020, 17:16. Показов 8756. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, есть вот такая задачка:
Дана матрица B[N,M]. Найти в каждой строке матрицы максимальный и минимальный элемент и поменять их местами с первым и последним элементом строки соответственно.

Попробовал вот так решить, но что-то идет не так... Помогите пожалуйста
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
using System;
 
namespace task_7
{
    class Program
    {
        static void Main(string[] args)
        {
            int i, j, n, m;
            int nMax = 0, nMin = 0;
            float min, max;
            float[,] b = new float[100, 100];
            
            Console.WriteLine("rows and calls");
            n = int.Parse(Console.ReadLine());
            m = int.Parse(Console.ReadLine());
 
            Console.WriteLine("mass:\n");
            for (i = 0; i < n; i++)
                for (j = 0; j < m; j++)
                    b[i, j] = float.Parse(Console.ReadLine());
 
            
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < m; j++)
                    Console.Write($"{b[i, j]} ");
                Console.WriteLine();
            }
            Console.WriteLine();
 
            for (i = 0; i < n; i++)
            {
                min = b[i,0];
                max = b[i,0];
                for (j = 0; j < m; j++)
                {
                    if(min > b[i, j]){
                        min = b[i, j];
                        nMin = j;
                    }
                    if(max < b[i, j]) {
                        max = b[i, j];
                        nMax = j;
                    }
                }
                
                float temp;
                temp = b[i, nMin];
                b[i, nMin] = b[i, n];
                b[i, n] = temp;
 
                temp = b[i, nMax];
                b[i, nMax] = b[i, i];
                b[i, i] = temp;
                //nMin = 0;
                //nMax = 0;
            }
            
            for (i = 0; i < n; i++){
                for (j = 0; j < m; j++)
                    Console.Write($"{b[i, j]} ");
                Console.WriteLine();
            }
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2020, 17:16
Ответы с готовыми решениями:

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

Поменять местами максимальный и минимальный элемент каждой строки матрицы
помогите пожалуйста написать программу)

Определить минимальный элемент в каждой строке матрицы и поменять его местами с первым элементом строки
Вывести на экран матрицу 3х4, элементами которой являются целые случайные числа из интервала ....

Дана матрица К(m, n). Найти максимальный элемент в каждой строке и заменить его заданным числом
«Дана матрица К(m,n,) найти максимальный элемент в каждой строке и заменить его заданным числом

5
490 / 167 / 98
Регистрация: 23.01.2020
Сообщений: 324
16.02.2020, 17:52 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
            int n = 5;
            int m = 8;
 
            int[,] myArr = new int[n, m];
 
            Random rnd = new Random();
 
            //Заполняем матрицу и выводим
            Console.WriteLine("Исходная матрица:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    myArr[i, j] = rnd.Next(0, 30);
                    Console.Write(myArr[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            //Проверяем и заменяем
            for (int i = 0; i < n; i++)
            {
                int maxIndex = 0;
                int minIndex = 0;
                int max = 0;
                int min = 1000;
                int prom;
                for (int j = 0; j < m; j++)
                {
                    if (myArr[i, j] > max)
                    {
                        max = myArr[i, j];
                        maxIndex = j;
                    }
                    
                    if (myArr[i, j] < min)
                    {
                        min = myArr[i, j];
                        minIndex = j;
                    }
                }
 
                //Запоминаем значения в ячейках с минимумом и максимумом
                int promMin = myArr[i, minIndex];
                int promMax = myArr[i, maxIndex];
 
                //Меняем минимальный и последний
                myArr[i, minIndex] = myArr[i, m - 1];
                myArr[i, m - 1] = promMin;
 
                //Меняем максимальный и первый
                myArr[i, maxIndex] = myArr[i, 0];
                myArr[i, 0] = promMax;
            }
 
            Console.WriteLine("Исправленная матрица:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    Console.Write(myArr[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            Console.ReadKey();
0
-12 / 0 / 0
Регистрация: 08.10.2016
Сообщений: 39
16.02.2020, 18:08  [ТС] 3
ShaRpN00B, блин, почти правильно работает, матрица как-то странно меняется, не все минимальные значения строки оказываются справа, может я чего не понимаю
Миниатюры
Дана матрица B[N,M]. Найти в каждой строке матрицы максимальный и минимальный элемент и поменять их местами   Дана матрица B[N,M]. Найти в каждой строке матрицы максимальный и минимальный элемент и поменять их местами  
0
490 / 167 / 98
Регистрация: 23.01.2020
Сообщений: 324
16.02.2020, 18:42 4
Лучший ответ Сообщение было отмечено Tartygin как решение

Решение

Tartygin, Действительно, вообщем смотри, я не додумал ничего умнее, чем отдельным циклом делать замену максимального и первого и отдельно минимального и последнего, вроде работает, протестируй отпиши если что)

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
            int n = 8;
            int m = 8;
 
            int[,] myArr = new int[n, m];
 
            Random rnd = new Random();
 
            //Заполняем матрицу и выводим
            Console.WriteLine("Исходная матрица:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    myArr[i, j] = rnd.Next(0, 30);
                    Console.Write(myArr[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            //Меняем минимальный и последний
            for (int i = 0; i < n; i++)
            {
                int minIndex = 0;
                int min = 1000;
 
                for (int j = 0; j < m; j++)
                {                    
                    if (myArr[i, j] < min)
                    {
                        min = myArr[i, j];
                        minIndex = j;
                    }
                }
                int promMin = myArr[i, minIndex];
                myArr[i, minIndex] = myArr[i, m - 1];
                myArr[i, m - 1] = promMin;
            }
 
            //Меняем максимальный и первый
            for (int i = 0; i < n; i++)
            {
                int maxIndex = 0;
                int max = 0;
 
                for (int j = 0; j < m; j++)
                {
                    if (myArr[i, j] > max)
                    {
                        max = myArr[i, j];
                        maxIndex = j;
                    }
                }
 
                
                int promMax = myArr[i, maxIndex];
                myArr[i, maxIndex] = myArr[i, 0];
                myArr[i, 0] = promMax;
            }
 
            Console.WriteLine("Исправленная матрица:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    Console.Write(myArr[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            Console.ReadKey();
1
1843 / 1185 / 501
Регистрация: 14.10.2018
Сообщений: 3,180
16.02.2020, 18:48 5
Лучший ответ Сообщение было отмечено Tartygin как решение

Решение

Tartygin, ShaRpN00B, будьте проще господа
1) В задачках такого типа ищите индексы а не значения
2) Одновременно искать минимальный и максимальный индекс может привести к ошибке
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        for (int i = 0; i < n; i++)
        {
            int min = 0, max = 0, temp;
 
            for (int j = 1; j < m; j++)
                if (myArr[i, max] < myArr[i, j]) max = j;
 
            temp = myArr[i, max];
            myArr[i, max] = myArr[i, 0];
            myArr[i, 0] = temp;
 
            for (int j = 1; j < m; j++)
                if (myArr[i, min] > myArr[i, j]) min = j;
 
            temp = myArr[i, min];
            myArr[i, min] = myArr[i, m - 1];
            myArr[i, m - 1] = temp;
        }
1
-12 / 0 / 0
Регистрация: 08.10.2016
Сообщений: 39
16.02.2020, 20:58  [ТС] 6
Enifan, ShaRpN00B, господа, спасибо огромное за помощь!)
0
16.02.2020, 20:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2020, 20:58
Помогаю со студенческими работами здесь

Найти максимальный и минимальный элемент в каждой строке и столбце матрицы и вывести на экран
Есть двумерный массив размера m на n. Нужно найти максимальный и минимальный елемент в каждом рядке...

Поменять местами максимальный и минимальный элемент в 1й и 3й строке
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

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

Найти в каждой строке матрицы наибольший элемент и поменять его местами с элементом главной диагонали
Помогите решить данную заачу в C# я ноль ( Дана целочисленная квадратная матрица найти в каждой...


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

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

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