Поиск максимального элемента в строке и минимального в столбце - C#
Формулировка задачи:
Дана таблица a, состоящая из n строк и n столбцов. Требуется определить, есть ли в таблице такой элемент a[i, j], который был бы максимален в i-й строке и минимален в j-м столбце. Если такой элемент есть в таблице, то вывести его координаты. Если таких элементов несколько, то вывести координаты одного из них.
Есть код на Pascal:
Её необходимо написать в C# по образу и подобию кода Pascal. Она работает, но увы и ах, неверно.
Вот что получилось у меня:
Помогите, пожалуйста, выявить ошибку в коде C#.
const n = 4;
a: array [1..n, 1..n] of
integer = ((10,9,80,7),(11,8,20,11), (9,7,40,1),(13,3,20,6));
var i, j, k, st, min : integer;
flag: boolean;
begin
i := 1;
flag := false;
while (i <= n) and not flag do
begin
st := 1;
for j := 2 to n do
if a[i, j] > a[i, st] then st := j;
{нашли максимум по i-й строке, запомним
его в переменной min}
min := a[i,st];
flag := true;
k := 0;
repeat
inc(k);
flag := flag and (a[k, st] >= min);
{flag будет равен true, если найденный
максимальный элемент является минимальным в
столбце st}
until (k >= n) or not flag;
inc(i)
end;
if flag then writeln(i-1:3, st:3)
else writeln('no');
readln
end.using System;
namespace задача
{
class Program
{
static void Main()
{
int n = 5, st = 0, min, k;
int[,] a = {
{ 10, 9, 80, 7 },
{ 11, 8, 20, 11 },
{ 9, 7, 40, 1 },
{ 13, 3, 20, 6 }
};
bool flag;
int i = 1;
flag = false;
while ((i <= n) && (flag == false))
{
st = 1;
for (int j = 1; j < n - 1; j++)
if (a[i, j] > a[i, st])
st = j;//нашли максимум по i-й строке, запомним его в переменной min
min = a[i, st];
flag = true;
k = 0;
do
{
k++;
flag = flag && (a[k, st] >= min);
}
while ((k >= n) || (flag != true));
i++;
}
if (flag)
Console.WriteLine((i-1) + " " + st);
else
Console.WriteLine("no");
}
}
}Решение задачи: «Поиск максимального элемента в строке и минимального в столбце»
textual
Листинг программы
n = 4