Задача Odd/Even position, Simple Loops
Имам питане относно задача 17 от Цикли (https://softuni.bg/trainings/1297/programming-basics-january-2016).
Кодът ми работи перфектно при цели числа, но при дробни дава грешки при изчизляването на минимум и максимум. Линк към кода:
http://pastebin.com/kH0y3qHK
И в Judge има грешка при тази задача, защото при вход
(n=) 6 и числа 2,3,5,4,2 и 1 дава резултат oddsum 9, oddmin 2, oddmax 5, evensum 8, evenmin 1 и evenmax 4, както и при вход:
(n=) 2 и числа 1.5 и -2.5 дава резултат oddsum 1.5 oddmin 1.5 oddmax 1.5 evensum -2.5 evenmin -2.5 evenmax -2.5
разбрах защо ми дава грешка, тук е проблемът (ползвам кодът, който ти си ми пастнал). Грешката е една и съща без значение дали се търси по числа или по позиции. Просто на ред 7 като заменим num с evenMin, после evenMax го сравнява с новото Нум, което вече е равно на евенМин :
for (int d = 1; d <= n; d++)
{
double num = double.Parse(Console.ReadLine());
if (d % 2 == 0)
{
sumEven += num;
if (evenMin > num) evenMin = num;
else if (evenMax<num) evenMax = num;
}
else if (d % 2 == 1) или (d % 2 != 0)
{
sumOdd += num;
if (oddMin > num) oddMin = num;
else if (oddMax < num) oddMax = num;
}
if (n == 2) { evenMax = evenMin; oddMax = oddMin; }
if (n == 3) { evenMax = evenMin; }
така работи безотказно:
for (double d = 1.0; d <= n; d++)
{
double num = double.Parse(Console.ReadLine());
if (d % 2.0 == 0.0) sumEven += num;
else sumOdd += num;
if (d%2.0==0.0)
{
if (evenMin > num) evenMin = num;
}
else
{
if (oddMin > num) oddMin = num;
}
if (d%2.0==0.0)
{
if (evenMax < num) evenMax = num;
}
else
{
if (oddMax < num) oddMax = num;
}
}
Ти тези редове ги имаш написани опаче по надолу със сищата иф-ова проверка, просто реших да я съкратя да не я прави а като влезе първия път да я направи. Разликата в кодовете беше
if (d % 2 == 0)
и съответно твоето решение:
if (num % 2.0 == 0.0)
А за дробните числа колега по надолу е писал че четни и нечетни са само целите числа, затова при целочисленото деление на дробни няма как да се получи нула.