Вычислить целые части элементов после последнего отрицательного в двумерном массиве C#
Нужно в двумерном массиве, после последнего отрицательного элемента вычислить сумму целых частей элементов, я перебрал массив с конца и когда дойдет до отрицательного то цикл остановится, ответ должен получиться по сути: 35 + 1 + 2 = 38, а у меня 66 выходит
{
double[,] array = new double[,]
{
{14.5, 16.7, 9.2, 6.5 },
{4, -4, 17, 11 },
{-25, 35.6, 1, 2 },
};
double result = 0;
for (int i = array.Length - 1; i >= 0; i--)
{
if (i > 0) { result += i; }
if (i < 0) { break; }
}
Console.WriteLine($"{Math.Floor(result)}");
Ответы (1 шт):
Идея правильная, реализация хромает. Не забывайте, что у вас двумерный массив, поэтому вам его нужно обходить используя 2 цикла (по строкам и по столбцам). Также, @aepot в комментариях правильно обратил внимание на строку из вашего кода result += i. Вы пытаетесь складывать индексы, а не значения, что является грубой ошибкой (или случайной опиской). К тому же, исходя из условия, вам нужно отсекать дробную часть при сложении. Это можно легко сделать, явно приведя double к int.
В итоге, получаем следующий код:
double[,] array = new double[,]
{
{14.5, 16.7, 9.2, 6.5},
{4, -4, 17, 11},
{-25, 35.6, 1, 2}
};
var height = array.GetLength(0);
var width = array.GetLength(1);
int result = 0;
int j = -1;
for (int i = height - 1; i >= 0 && j < 0; i--)
{
result = 0;
for (j = width - 1; j >= 0; j--)
{
var number = array[i, j];
if (number > 0)
{
result += (int)number; // гарантированно отсекаем у number дробную часть
}
else if (number < 0)
{
break;
}
}
}
Console.WriteLine(result);