SHOW:
|
|
- or go back to the newest paste.
1 | using System; | |
2 | ||
3 | class MaxSumSquare | |
4 | { | |
5 | static void PrintMatrix(int[,] matrix) | |
6 | { | |
7 | for (int row = 0; row < matrix.GetLength(0); row++) | |
8 | { | |
9 | for (int col = 0; col < matrix.GetLength(1); col++) | |
10 | { | |
11 | Console.Write("{0,4}", matrix[row, col]); | |
12 | } | |
13 | Console.WriteLine(); | |
14 | Console.WriteLine(); | |
15 | } | |
16 | } | |
17 | ||
18 | static void Main() | |
19 | { | |
20 | //Твоята матрица | |
21 | int[,] firstTestMatrix = { | |
22 | {7, 1, 3, 3, 2, 1}, | |
23 | {1, 3, 9, 8, 5, 6}, | |
24 | {4, 6, 7, 9, 1, 0} }; | |
25 | ||
26 | //Още една примерна матрица | |
27 | int[,] secondTestMatrix = { | |
28 | {7, 1, 3, 3, 2, 1}, | |
29 | {1, 3, 9, 8, 5, 6}, | |
30 | {4, 6, 7, 9, 1, 0}, | |
31 | {9, 9, 9, 9, 9, 9} }; | |
32 | ||
33 | //За да може автоматично да обходим двете тестови матрици | |
34 | int[][,] allTestMatrises = {firstTestMatrix, secondTestMatrix }; | |
35 | ||
36 | int[,] maxMatrix = new int[3, 3]; | |
37 | ||
38 | ||
39 | foreach (var testMatrix in allTestMatrises) | |
40 | { | |
41 | int currentSum = 0; | |
42 | int maxSum = int.MinValue; | |
43 | int startRow = 0; | |
44 | int startCol = 0; | |
45 | ||
46 | PrintMatrix(testMatrix); | |
47 | ||
48 | //Трябва да да добавиш още една итерация(използвайки "<=" вместо "<") | |
49 | - | //в циклите обхождащи началната матрица, иначе кодът вътре не се изпълнява. |
49 | + | //в циклите обхождащи индексите на началната матрица, иначе кодът вътре не се изпълнява. |
50 | - | //При матрица с един от размерите равен на 3 |
50 | + | |
51 | for (int row = 0; row <= testMatrix.GetLength(0) - 3; row++) | |
52 | { | |
53 | - | for (int col = 0; col <= secondTestMatrix.GetLength(1) - 3; col++) |
53 | + | for (int col = 0; col <= testMatrix.GetLength(1) - 3; col++) |
54 | { | |
55 | //методът за сумиране - непроменен | |
56 | currentSum = SumElementsOfSubMatrix(testMatrix, row, col); | |
57 | ||
58 | if (currentSum > maxSum) | |
59 | { | |
60 | //Всичко е наред тук | |
61 | maxSum = currentSum; | |
62 | startRow = row; | |
63 | startCol = col; | |
64 | ||
65 | //Това е проблемната част от кода. Разгледай я. | |
66 | CopyMaxSumElements(maxMatrix, testMatrix, startRow, startCol); | |
67 | } | |
68 | currentSum = int.MinValue; | |
69 | } | |
70 | } | |
71 | ||
72 | Console.WriteLine("The elements with maximal sum of the elements are: "); | |
73 | PrintMatrix(maxMatrix); | |
74 | Console.WriteLine(); | |
75 | ||
76 | } | |
77 | ||
78 | //Тук също има грешка, не съм я гледал. Изпозлвах PrintMatrix за да ти | |
79 | //покажа резултата | |
80 | //Console.WriteLine("{0,4} {1,4} {2,4}", maxMatrix[startRow, startCol], maxMatrix[startRow, startCol + 1], maxMatrix[startRow, startCol + 2]); | |
81 | //Console.WriteLine("{0,4} {1,4} {2,4}", maxMatrix[startRow + 1, startCol], maxMatrix[startRow + 1, startCol + 1], maxMatrix[startRow + 1, startCol + 2]); | |
82 | //Console.WriteLine("{0,4} {1,4} {2,4}", maxMatrix[startRow + 2, startCol], maxMatrix[startRow + 2, startCol + 1], maxMatrix[startRow + 2, startCol + 2]); | |
83 | ||
84 | ||
85 | } | |
86 | ||
87 | private static void CopyMaxSumElements | |
88 | (int[,] maxMatrix, int[,] testMatrix, int startRow, int startCol) | |
89 | { | |
90 | //"Вътрешните цикли правилно започват от стартовите индекси за | |
91 | //ред и колона на подматрицата с макс. сума | |
92 | for (int i = startRow; i <= startRow + 2; i++) | |
93 | { | |
94 | for (int j = startCol; j <= startCol + 2; j++) | |
95 | { | |
96 | //Този ред ти хвърля изключение, защото не ползваш | |
97 | //правилните индекси. За начална матрица [20,20]; | |
98 | // и startRow =7, startCol=13 ще се опиташ да запишеш на | |
99 | // maxMatrix[7, 13.] | |
100 | //maxMatrix[i, j] = matrix[row, col]; | |
101 | ||
102 | //"Така започваш да записваш от позиция [0,0] | |
103 | //до позиция [2,2] в maxMatrix" | |
104 | maxMatrix[i - startRow, j - startCol] = testMatrix[i, j]; | |
105 | } | |
106 | } | |
107 | } | |
108 | ||
109 | private static int SumElementsOfSubMatrix | |
110 | (int[,] testMatrix, int row, int col) | |
111 | { | |
112 | int currentSum = testMatrix[row, col] + testMatrix[row, col + 1] + | |
113 | testMatrix[row, col + 2] + testMatrix[row + 1, col] + | |
114 | testMatrix[row + 1, col + 1] + testMatrix[row + 1, col + 2] + | |
115 | testMatrix[row + 2, col] + testMatrix[row + 2, col + 1] + | |
116 | testMatrix[row + 2, col + 2]; | |
117 | return currentSum; | |
118 | } | |
119 | ||
120 | } |