|
Ну вот мое видение функции Answer, которая возвращает 0, если N-й (нумерация идет с 0) гном говорит "зеленая", 1 если "красная" (допустим, что все гномы хранятся в одном числе - 1й в младшем разряде):
Code:
int Answer(int Gnomes, int N)
{
if (N == 0)
return 1;
int num = 0;
int degree = 1; //Степень двойки, т.е. числа 00000001, 00000010, 00000100 и т.д.
for (int i = 1; i < N - 1; i++)
{
if (Gnomes & degree == 0)
num++;
degree <<= 1;
}
if (num % 2) //Если уж совсем ударяться в битовые операции, то можно if (num & 1)
return 0;
return 1;
}
Т.е. в результате сдвига числа degree мы постоянно получаем число с единицей в единственном разряде (сначала в младшем, потом во втором, третьем и т.д.), с помощью оператора & проверяем, есть ли в числе Gnomes в этом разряде 1 (нам нужен 0, поэтому сравниваем результат с нулем), если да, то увеличиваем счетчик. Ну и потом смотрим его четность. |
IP сохранен
|
Последний раз редактировалось: 25-10-2010 13:45:13 Автор Captain т.к. |