Найти отрицательные элементы в строках, содержащих нулевой элемент и седловые точки матрицы - 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 :(");
}