C# Advanced - 02. Multidimensional Arrays - 02. Maximal sum


0

Изкарвам нулевите тестове, но останалите или дават грешен отговор, или гърмят. Някакви идеи къде бъркам?

using System; namespace MaximalSum { class MaximalSum { static void Main() { string input = Console.ReadLine(); int n = (int)char.GetNumericValue(input[0]); int m = (int)char.GetNumericValue(input[2]); int[,] matrix = new int[n, m]; string[] nums = new string[m]; // read the matrix for (int row = 0; row < n; row++) { nums = Console.ReadLine().Split(' '); for (int col = 0; col < m; col++) { matrix[row, col] = Convert.ToInt32(nums[col]); } } int sum = 0; int maxSum = int.MinValue; // find max sum of 3x3 square inside matrix for (int i = 0; i < n - 2; i++) { for (int j = 0; j < m - 2; j++) { for (int p = i; p < 3 + i; p++) { for (int q = j; q < 3 + j; q++) { sum += matrix[p, q]; } } if (sum > maxSum) { maxSum = sum; } sum = 0; } } // print maxSum Console.WriteLine(maxSum); } } }




Отговори



0

Здравей, проблема идва от четенето на размера на двумерния масив, от метода GetNumericType, който всъщност връща floating-point число,а и когато ти въведат като размерности двуцифрени,трицифрени и тн. числа GetNumericType взима единичен символ. В случая по-удобно е да четеш редовете и колоните използвайки "string[] input = Console.ReadLine().Split(' ')",което си използвал по-надолу в кода си, след което да вземеш нулевия и първия елемент от масива и да ги parse-неш към цяло число.

Ето и вариант на моето решение




0
Мда, GetNumericValue е лоша идея. Смених го и сега излиза всичко. Мерси!


0

Може ли малко помощ? Решението ми е много подобно на колегата Vicev , но ми дава 40/100 в bgcoder.

using System; namespace _02.Maximal_Sum { class Program { static void Main() { string[] input = Console.ReadLine().Split(' '); int N = int.Parse(input[0]); int M = int.Parse(input[1]); int[,] arr = new int[M, N]; string[] nums = new string[M]; int sum = 0; int maxSum = int.MinValue; for (int row = 0; row < N; row++) { nums = Console.ReadLine().Split(' '); for (int col = 0; col < M; col++) { arr[row, col] = Convert.ToInt32(nums[col]); } } for (int row = 0; row < N -2; row++) { for (int col = 0; col < M -2; col++) { for (int p = row; p < 3 + row; p++) { for (int j = col; j < 3+col; j++) { sum += arr[p, j]; } } if (sum > maxSum) { maxSum = sum; } sum = 0; } } Console.WriteLine(maxSum); } } }


от peter_85 (279 точки)