матрица, подматрица с наибольшей суммой

#c#

#c#

Вопрос:

Задача: 1. Составьте матрицу n на m и заполните ее данными из консоли. 2. Найдите подматрицу 3 * 3 с наибольшей суммой.

 {
    static int[,] ArrayReadConsole()
    {
        Console.WriteLine("please enter n:");
        int n;
        n = Int32.Parse(Console.ReadLine());
        Console.WriteLine("please enter m:");
        int m;
        m = Int32.Parse(Console.ReadLine());
        int[,] data = new int[n, m];
        for (int i = 0; i < n; i  )
        {
            for (int j = 0; j < m; j  )
            {
                Console.WriteLine("please enter a new value");
                int number;
                number = Int32.Parse(Console.ReadLine());
                data[i, j] = number;        
            }
        }
        return data;
    }
    static void SumOfPlatform(int[,] data)
    {
        int sum =0;
        int x = 0;
        int y = 0;
        int maxSum = 0;
        for (int i = 0; i < data.GetLength(0) - 2; i  )
        {
            for (int j = 0; j < data.GetLength(1) - 2; j  )
            {
                for (int k = 0; k < 3; k  )
                {
                    for (int l = 0; l < 3; l  )
                    {
                        sum =  data[i   k, j   l];
                    }
                }
                if (maxSum < sum)
                {
                    maxSum = sum;
                    x = i;
                    y = j;
                }
                sum =0;
            }
        }
        Console.WriteLine("Sum: {0}nPosition: {1} {2}",maxSum,x,y );
    }
    static void Main()
    {
        int[,] data = ArrayReadConsole();
        SumOfPlatform(data);
    }
}
 

}
Я написал этот код, но что-то пошло не так… Он не находит позицию или сумму матрицы, которую я ввожу. Я знаю, что цикл 4x for — плохая идея, просто я не хотел создавать другой метод только для этого. Есть идеи, почему это не работает?

Комментарии:

1. sum = data[i k, j l]; Это должно быть = ?

2. Что-то неясно? Пожалуйста, помогите новичку :).

3. Я предполагаю, что под «суммой» вы подразумеваете сложение всех элементов заданной матрицы 3×3 вместе. = это оператор, который добавляет выражение правой стороны к значению левой стороны, тогда = как это просто = с избыточным положительным оператором. По сути, вы переназначаете sum значение, равное ячейке, вместо добавления значения ячейки sum .

4. Интересно, да, я использовал = в первый раз, но у меня появилось сообщение об ошибке, поэтому я «исправил его» на = . Хорошо, я изменил его обратно. Теперь сумма верна, но x, y все равно не будут работать..

5. Что касается «лучшего решения», этот способ выполняет работу в целом простым способом, поэтому любые улучшения будут либо способствовать удобочитаемости, применению определенной философии программирования и / или основываться на мнении.

Ответ №1:

Ваш код для SumOfPlatform работает только с изменением с = на =

 static void SumOfPlatform(int[,] data)
        {
            int sum = 0;
            int x = 0;
            int y = 0;
            int maxSum = 0;
            for (int i = 0; i < data.GetLength(0) - 2; i  )
            {
                for (int j = 0; j < data.GetLength(1) - 2; j  )
                {
                    for (int k = 0; k < 3; k  )
                    {
                        for (int l = 0; l < 3; l  )
                        {
                            sum  = data[i   k, j   l]; //only Change
                        }
                    }
                    if (maxSum < sum)
                    {
                        maxSum = sum;
                        x = i;
                        y = j;
                    }
                    sum = 0;
                }
            }
            Console.WriteLine("Sum: {0}nPosition: {1} {2}", maxSum, x, y);
        }
        static void Main(string[] args)
        {
            //  int[,] data = ArrayReadConsole();

            int[,] data = new int[,]
            {
                {1,4,6,7,3,5,7,4 },
                {1,4,5,3,3,5,4,4 },
                {1,1,6,2,1,5,7,4 },
                {1,3,6,3,3,5,2,4 },
                {1,4,6,2,3,5,3,4 },
                {1,4,2,2,3,5,3,4 },
                {1,4,3,3,3,5,2,4 },
                {1,4,4,3,3,5,2,4 }
            };

            SumOfPlatform(data);



        }
 

Комментарии:

1. Хотя помощь Abion47 пришла быстрее и была такой же полезной, как и ваша, он написал комментарии, которые я не могу принять, поэтому я принимаю ваш ответ.