Нахождение чётных / нечётных чисел в строке(string)
Задача: Из представленных в строке numbers чисел найти одно отличающееся от всех число по чётности.
Строка выглядит таким образом: "1 2 2" или "2 4 7 8 10"
!Одно из важных условий: Счёт индексов чисел должен начинаться с 1 (не с 0, как мы знаем)!
(если данный момент не понятен - попробую объяснить по-лучше)
Я написал следующий код:
using System;
using System.Linq;
public class IQ
{
public static int Test(string numbers)
{
int leng = numbers.Length;
for (int i = 0; i < leng; i++)
{
if ((Convert.ToInt32(numbers[i]) % 2) > 0)
{
return i;
}
}
}
}
Переменная leng принимает значение длины строки numbers (длина может быть любой)
Внутрь цикла for внедрил проверку условия на нечётность (конкретно в моей задаче надо находить нечётные числа, но это не помешает переконвертировать решение для нахождения чётных чисел)
Мне не удалось придумать, как мне вывести идентификатор нужного числа в человеческом виде, поэтому оставил просто возвращение идентификатора, чтобы убедиться, что основа программы раотает. Однако, к моему удивлению никакие значений не возвращаются.
Что я сделал не так, и как реализовать фичу с "человеческим счётом"(если непонятно я попробую обхяснить по-подробнее)
Ответы (1 шт):
public static int Test(string numbers)
{
var parts = numbers.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
int iLastEven = -1;
int iLastOdd = -1;
int countEven = 0;
int countOdd = 0;
for (int i = 0; i < parts.Length && (countEven < 2 || countOdd < 2); i++)
{
var num = int.Parse(parts[i]);
if (num % 2 == 0)
{
iLastEven = i;
countEven++;
}
else
{
iLastOdd = i;
countOdd++;
}
}
if (countEven == 1 && countOdd > 1)
return iLastEven + 1;
else if (countOdd == 1 && countEven > 1)
return iLastOdd + 1;
else
return -1;
}