Найти отрицательные элементы в строках, содержащих нулевой элемент и седловые точки матрицы - C#
Формулировка задачи:
Дана целочисленная прямоугольная матрица. Определить:
1) количество отрицательных элементов в тех строках, которые содержат хотя бы один нулевой элемент.
2) номера строк и столбцов всех седловых точек матрицы
Я написал формулу но не могу найти ошибку, "номера строк и столбцов всех седловых точек матрицы" не показывает, помогите пожалуйста, заранее спасибо
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Labka_6 { class Program { static void Main(string[] args) { int[,] mas = new int[5, 5]; Random rnd = new Random(); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { mas[i, j] = -5 + rnd.Next(11); Console.Write(mas[i, j] + " "); } Console.WriteLine(); } int count;//используется для подсчета количества отрицательных элементов for (int i = 0; i < 5; i++) { count = 0; for (int j = 0; j < 5; j++) { if (mas[i, j] == 0) { for (int k = 0; k < 5; k++) { if (mas[i, k] < 0) count++; } Console.WriteLine("В {0} строке количество отрицательных элементов = {1}", (i + 1), count); break; } } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) Console.Write(""); Console.WriteLine(); } //2. Номера строк и столбцов, всех седловых точек: Console.WriteLine("Номера строк и столбцов всех седловых точек:"); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { bool flag = true; //идти далее //минимальный ли в своей строке for (int jj = 0; jj < 5; jj++) if (mas[i, j] > mas[i, jj]) { flag = false; break; } if (flag) { //максимальный ли в своем столбце for (int ii = 0; ii < 5; ii++) if (mas[i,j] < mas[ii, j]) { flag = false; break; } if (flag) Console.WriteLine(mas[i, j] + "[" + i + ";" + j + "]"); } } } Console.ReadKey(); } } }
Решение задачи: «Найти отрицательные элементы в строках, содержащих нулевой элемент и седловые точки матрицы»
textual
Листинг программы
static void Main(string[] args) { int rows = 5, cols = 7; int min = -4, max = 3; int[,] matrix = new int[rows, cols]; Random rnd = new Random(); for (int j = 0; j < rows; j++) { for (int i = 0; i < cols; i++) { matrix[j, i] = min + rnd.Next(max - min + 1); Console.Write("{0}\t", matrix[j, i]); } Console.WriteLine(); } Console.WriteLine(); List<int>[] columnMaxesIndices = new List<int>[cols]; List<int>[] rowMinsIndices = new List<int>[rows]; for (int i = 0; i < cols; i++) columnMaxesIndices[i] = new List<int> { 0 }; for (int j = 0; j < rows; j++) { bool hasZero = false; int negativeCount = 0; rowMinsIndices[j] = new List<int> { 0 }; for (int i = 0; i < cols; i++) { if (matrix[j, i] < 0) negativeCount++; else if (matrix[j, i] == 0) hasZero = true; int localMin = matrix[j, rowMinsIndices[j].First()]; if (i == 0) ; else if (matrix[j, i] < localMin) { rowMinsIndices[j].Clear(); rowMinsIndices[j].Add(i); } else if (matrix[j, i] == localMin) rowMinsIndices[j].Add(i); int localMax = matrix[columnMaxesIndices[i].First(), i]; if (j == 0) ; else if (matrix[j, i] > localMax) { columnMaxesIndices[i].Clear(); columnMaxesIndices[i].Add(j); } else if (matrix[j, i] == localMax) columnMaxesIndices[i].Add(j); } if (hasZero) Console.WriteLine("Line {0} contains zero elements and has {1} negative ones", j, negativeCount); else Console.WriteLine("Line {0} does not contain zero any element", j); } Console.WriteLine("\nSaddle points:"); bool hasSaddle = false; for (int j = 0; j < rows; j++) foreach (int i in rowMinsIndices[j]) if (columnMaxesIndices[i].Contains(j)) { Console.WriteLine("\trow: {0}; column: {1}", j + 1, i + 1); hasSaddle = true; } if (!hasSaddle) Console.WriteLine("No Saddle Points were found :("); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д