c# как проверить в 2d матрице, что все числа выше или ниже уклона равны 0? - PullRequest
0 голосов
/ 17 января 2020

меня попросили написать программу, которая проверяет в 2d 6x6, все ли числа выше или ниже уклона равны 0, до сих пор я создал простую матрицу, чтобы помочь мне понять это, но я застрял в условии и я не уверен, что делать .. exmaple:

exmaple


мой код до сих пор: (получил стек в условии)

int[,] matrix = new int[6, 6]
            {
              {1,0,0,0,0,0},
              {0,2,0,0,0,0},
              {0,0,3,0,0,0},
              {0,0,0,4,0,0},
              {0,0,0,0,5,0},
              {0,0,0,0,0,6},
            };

        int row, col;
        int zeroabove = 0;
        int zerobelow = 0;

        for (row = 0; row < 6; row++)
        {
            for(col = 0; col < 6; col++)
            {
                if (row == 0 || col == 0)
                {
                  //idk what to put here  
                }
            }
        }

Ответы [ 2 ]

1 голос
/ 17 января 2020

Вы должны использовать такой код:

int row, col;
bool isZeroAbove = true;
bool isZeroBelow = true;

for (row = 0; row < 6 && (isZeroAbove || isZeroBelow); row++)
    for (col = 0; col < 6 && (isZeroAbove || isZeroBelow); col++)
        if (matrix[row, col] != 0)
            if (row > col)
                isZeroBelow = false;
            else if (row < col)
                isZeroAbove = false;
0 голосов
/ 18 января 2020

Насколько я понимаю ваш вопрос, вы хотите проверить определенные ячейки в матрице в зависимости от их координат. Например, если вы пытаетесь проверить все ячейки, которые находятся выше диагонали, образованной линией x = y, тогда вы будете sh проверять только те ячейки, где x > y.

. легко с LINQ, но LINQ не очень хорошо работает с двумерными массивами. Таким образом, чтобы сделать это возможным, нам нужен метод расширения, который будет выбирать двумерный массив и возвращать координаты и значение для каждой ячейки. Это может быть выполнено с помощью простого метода расширения:

public static class ExtensionMethods
{
    public class MatrixItem<T>
    {
        public int X { get; set; }
        public int Y { get; set; }
        public T Value { get; set; }
    }
    static public IEnumerable<MatrixItem<T>> Flatten<T>(this T[,] source)
    {
        for (int i = source.GetLowerBound(0); i <= source.GetUpperBound(0); i++)
        {
            for (int j = source.GetLowerBound(1); j <= source.GetUpperBound(1); j++)
            {
                yield return new MatrixItem<T> { X = j, Y = i, Value = source[i, j] };
            }
        }
    }
}

При использовании с двумерным массивом этот метод возвращает одномерное перечислимое значение, содержащее каждую ячейку вместе с ее координатами в объекте с именем * 1008. *. Координаты и значение представлены в виде отдельных свойств.

Теперь, когда мы можем легко выполнить запрос к матрице, решение вашей проблемы очень простое:

bool zeroAbove = !matrix.Flatten()
    .Where(item => item.X > item.Y)
    .Any(item => item.Value != 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...