#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 пришла быстрее и была такой же полезной, как и ваша, он написал комментарии, которые я не могу принять, поэтому я принимаю ваш ответ.