Найти сумму модулей отрицательных нечетных элементов
Дан двухмерный массив 5×5. Найти сумму модулей отрицательных нечетных элементов. Я написал код и столкнулся с такой проблемой, отрицательные числа между собой должны прибавляться , например : -5 -5 - 4 = -14 . А у меня выходит совсем другая сумма . Либо я чего-то не понимаю , либо у меня код не правильный . Помогите пожалуйста , буду благодарен за любой ответ ! Вот мой код :
int n = 5, m = 5;
int[,] matrix = new int[n, m];
int sum = 0;
Random rnd = new Random();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
matrix[i, j] = rnd.Next(-10, 10);
Console.Write($" {matrix[i, j]} ");
}
Console.WriteLine();
}
Console.WriteLine("Нечетные отрицательные елементы");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if ((matrix[i, j] < 0) && (matrix[i, j] % 2 != 0))
{
sum = matrix[i, j];
Console.Write($"{sum}");
}
}
}
Console.Write(" Сумма: ");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (matrix[i, j] < 0 && matrix[i, j] % 2 == 1)
sum += Math.Abs(matrix[i, j]);
}
}
Console.WriteLine($"{sum} ");
Ответы (1 шт):
Когда второй цикл заканчивает работу, в памяти в переменной sum остается значение последнего элемента массива, который вывелся на экран. И к этому значению вы прибавляете все остальные элементы. Таким образом, нужно обнулять переменную Sum перед 3-м циклом либо суммировать нечетные отрицательные элементы в другую переменную.
int n = 5, m = 5;
int[,] matrix = new int[n, m];
int sum = 0;
Random rnd = new Random();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
matrix[i, j] = rnd.Next(-10, 10);
Console.Write($" {matrix[i, j]} ");
}
Console.WriteLine();
}
Console.WriteLine("Нечетные отрицательные елементы");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if ((matrix[i, j] < 0) && (matrix[i, j] % 2 != 0))
{
sum = matrix[i, j];
Console.Write($"{sum}");
}
}
}
sum = 0;
Console.Write(" Сумма: ");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (matrix[i, j] < 0 && matrix[i, j] % 2 == 1)
sum += Math.Abs(matrix[i, j]);
}
}
Console.WriteLine($"{sum} ");
Другие комментарии:
- Если размер массива всегда 5х5, то зачем создавать 2 дополнительных переменных, если можно обойтись одной:
int[,] matrix = new int[n, n]или вообще 0:int[,] metrix = new int[5,5]- Так как все элементы, которые вы ищите, отрицательны, то окончательная сумма будет противоположна модулю суммы отрицательных нечетных чисел, следовательно вы можете не использовать Math, а просто прибавлять число:
sum += matrix[i, j], а в конце умножитьsum *= -1, чтобы получить модуль - неторицательное число.