2 / 2 / 0
Регистрация: 06.08.2013
Сообщений: 50
1

Поменять местами минимальный и максимальный элемент матрицы

02.03.2016, 20:53. Показов 7717. Ответов 5
Метки нет (Все метки)

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
namespace Abcd
{
    class Program
    {
        static void Main()
        {
 
            Console.Write("Введите длину массива: ");
            int n = Convert.ToInt32(Console.ReadLine()); // Считываем строку, переводим в число.
            Console.Write("Введите ширину массива: ");
            int m = Convert.ToInt32(Console.ReadLine());
            int[,] matrix = new int[n, m]; //Объявляем массив строк длиной n и шириной m (которую ввёл пользователь)
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                {
                    Console.Write("Введите элемент №{0}{1}:\r\n    ", i, j);
                    matrix[i, j] = Convert.ToInt32(Console.ReadLine()); //Заполняем его
                }
            Console.WriteLine("Массив состоит из следующих элементов:");
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                {
                    Console.WriteLine(matrix[i, j]);
                }
 
 
 
 
            int min = matrix[0, 0];
            int max = matrix[0, 0];
 
 
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                {
                    if (matrix[i, j] > max)
                    {
                        max = matrix[i, j];
                    }
 
                    if (matrix[i, j] < min)
                    {
                        min = matrix[i, j];
                    }
                }
            Console.WriteLine("Максимальный элемент массива {0}", max);
            Console.WriteLine("Минимальный элемент массива элемент массива {0}", min);
 
            
 
                Console.ReadLine();
            }
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2016, 20:53
Ответы с готовыми решениями:

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

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

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

Поменять местами максимальный и минимальный элемент массива
Сформировать массив 20 целых случайных чисел в диапазоне от минус 30 до 30. * Напечатать его....

5
38 / 38 / 52
Регистрация: 03.02.2016
Сообщений: 99
02.03.2016, 22:40 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
            int [,] arr = new int[5,5];
            Random random = new Random();
           
 
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
 
                {
                    arr[i,j] = random.Next(0, 50);
                    Console.Write(arr[i,j] + " ");
                }
                Console.WriteLine();
            }
            int max = arr[0, 0], min = arr[0, 0];
 
            int index1=0, index2=0;
 
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
 
                    if (max < arr[i, j])
                    {
                        max = arr[i, j];
                        index1 = i;
                        index2 = j;
                    }
                    if (min > arr[i, j])
                        min = arr[i, j];
                }
            }
 
            Console.WriteLine("Максимальный {0} минимальный {1}", max, min);
 
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    if (min == arr[i, j])
                    {
                  
                        arr[i, j] ^= arr[index1, index2];
                        arr[index1, index2] ^= arr[i, j];
                        arr[i, j] ^= arr[index1, index2];
                    }
                }
            }
 
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                   
                    Console.Write(arr[i, j] + " ");
                }
                Console.WriteLine();
            }
 
            Console.ReadLine();
1
2 / 2 / 0
Регистрация: 06.08.2013
Сообщений: 50
02.03.2016, 23:38  [ТС] 3
замена происходит не совсем корректно. в новом массиве максимальный элемент идет на место минимального, а на месте где должен оказаться минимальный элемент появляется ноль.

Добавлено через 18 минут
странно. воспроизвел работу с индексами в своем коде, тоже происходила замена "с нулем". скопировал код в новый проект - работает нормально. что это может быть?
0
38 / 38 / 52
Регистрация: 03.02.2016
Сообщений: 99
02.03.2016, 23:48 4
Rebuild Solution нужно было сделать. Я думаю из-за этого.
0
2 / 2 / 0
Регистрация: 06.08.2013
Сообщений: 50
03.03.2016, 00:07  [ТС] 5
Rebuild не помог. Теперь и свежем проекте происходит "замена на ноль". что за фантомы(
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.03.2016, 00:21 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

zSerhei, делайте свап через промежуточную переменную, не надо этого выпедрежа с хорами Я рад, что вы знаете, что это может сработать, но например однострочник обмена из С++ а -ля a^= (b^= a) в шарпе например не прокатывает из-за строго порядка выполнения операндов. Так что пишем var temp = a[i,j] и причем сразу понятно, что написано Хотя есть люди, которые специально предпочитают непонятно писать, чтобы типа круче было. Круче ли это на самом деле - вопрос.

Добавлено через 7 минут
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
using System;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] arr = new int[5, 5];
            Random random = new Random();
            for (int i = 0; i < arr.GetLength(0); i++)
            {
                for (int j = 0; j < arr.GetLength(1); j++)
                {
                    arr[i, j] = random.Next(0, 50);
                }
            }
            PrintArray(arr);
 
            int minI = 0, minJ = 0, maxI = 0, maxJ = 0;
 
            for (int i = 0; i < arr.GetLength(0); i++)
            {
                for (int j = 0; j < arr.GetLength(1); j++)
                {
                    if (arr[minI, minJ] > arr[i, j])
                    {
                        minI = i;
                        minJ = j;
                    }
                    else if (arr[maxI, maxJ] < arr[i, j])
                    {
                        maxI = i;
                        maxJ = j;
                    }
                }
            }
 
            Console.WriteLine("Минимальный: {0}\tМаксимальный: {1}", arr[minI, minJ], arr[maxI, maxJ]);
 
            var tmp = arr[maxI, maxJ];
            arr[maxI, maxJ] = arr[minI, minJ];
            arr[minI, minJ] = tmp;
 
            PrintArray(arr);
            Console.ReadKey();
        }
 
        static void PrintArray(int[,] array)
        {
            for (int i = 0; i < array.GetLength(0); i++)
            {
                for (int j = 0; j < array.GetLength(1); j++)
                {
                    Console.Write(array[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
}
1
03.03.2016, 00:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2016, 00:21
Помогаю со студенческими работами здесь

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

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

Поменять местами строки в матрице, содержащие минимальный и максимальный элемент
дана матрица размера 6x9 поменять местами строки содержащие минимальный и максимальный элемент с#

Массив: поменять местами первый минимальный с первым элементом массива, а максимальный элемент - с последним
первый минимальный с первым элементом массива поменять местами ,а максимальный элемент с последним...


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

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

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