Поиск седловых точек матрицы - C#

Узнай цену своей работы

Формулировка задачи:

Дана целочисленная прямоугольная матрица. Определить: • сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент; • номера строк и столбцов всех седловых точек матрицы. ПРИМЕЧАНИЕ Матрица А имеет седловую точку Аij, если Аij является минимальным элементом в i-й строке и максимальным — в j-м столбце.

Решение задачи: «Поиск седловых точек матрицы»

textual
Листинг программы
class Program
    {
        static void Main()
        {
            const int width = 5, height = 3;
            int[,] array = new int[height,width];
            Random rnd = new Random();
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    array[i, j] = rnd.Next(-10, 50);
                }
            }
 
            ShowArray(array);
            Console.WriteLine("==================================");
            SumWhereIsNegativeElement(array);
            Console.WriteLine("==================================");
            SaddlePoints(array);
 
            Console.ReadLine();
        }
 
        /// <summary>
        /// Номера строк и столбцов всех седловых точек матрицы.
        /// </summary>
        private static void SaddlePoints(int[,] array)
        {
            for (int i = 0; i < array.GetLength(0); i++)
            {
                for (int j = 0; j < array.GetLength(1); j++)
                {
                    if (!IsMinInRow(array, i, j) || !IsMaxInCol(array, i, j)) continue;
                    Console.WriteLine("    Элемент {0} является седловым.", array[i, j]);
                    Console.WriteLine("Строка: {0}\tстолбец: {1}", i + 1, j + 1);
                }
            }
        }
 
        private static bool IsMaxInCol(int[,] array, int i, int j)
        {
            for (int k = 0; k < array.GetLength(0); k++)
            {
                if (array[k, j] > array[i, j])
                    return false;
            }
            return true;
        }
 
        private static bool IsMinInRow(int[,] array, int i, int j)
        {
            for (int k = 0; k < array.GetLength(1); k++)
            {
                if (array[i, k] < array[i, j])
                    return false;
            }
            return true;
        }
 
        /// <summary>
        /// Сумма элементов в тех строках, которые содержат хотя бы один отрицательный элемент
        /// </summary>
        private static void SumWhereIsNegativeElement(int[,] array)
        {
            for (int i = 0; i < array.GetLength(0); i++)
            {
                bool isNegative = false;
                int sum = 0;
                for (int j = 0; j < array.GetLength(1); j++)
                {
                    sum += array[i, j];
                    if (array[i, j] < 0)
                        isNegative = true;
                }
 
                if (!isNegative) continue;
                Console.WriteLine("    {0} строка имеет отрицательный элемент.", i + 1);
                Console.WriteLine("Сумма элементов: {0}", sum);
            }
        }
        
        private static void ShowArray(int[,] array)
        {
            for (int i = 0; i < array.GetLength(0); i++)
            {
                for (int j = 0; j < array.GetLength(1); j++)
                {
                    Console.Write("{0}\t", array[i, j]);
                }
                Console.WriteLine();
            }
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы