Авторизация



Счетчики

Обмен ссылками

Блог программиста
Главная Форум Помогите с программой
 Форум
Добро пожаловать Гость   [Зарегистрироваться]  Войти
Ответить
 Тема :Помогите с программой.. 24-10-2010 16:03:00 
Bane
Hello, world!
Онлайн с: 24-10-2010 11:48:15
Сообщения: 2
Среда обитания
Привет. Мне надо сдавать зачёт по программе. Я понял как её писать написал,но есть где-то ошибка,которую никак не могу найти.
Условия задачи выглядят так: в комнате сидят 16 гномов. Последний видит всех гномов,которые сидят перед ним. Следующий видит всех кроме последнего и т.д.. На гномах шапки двух цветов. К каждому гному подходит человек и спрашивает какого цвета на этом гноме шапка. Если гном отвечает правильно то ему дают доллар. Как должны сговориться гному,чтобы получить максимальное количество денег.
Надо представить люое число как двоичный код. 1-красная шапка.0-зелёная. Последний гном смотрит на чётность количества нулей перед ним если чётное то он 1.нечётное-0.
каждый следующий делает также.
не могли бы помочь с написанием. писал в Borland C++:?
IP сохранен
Последний раз редактировалось: 24-10-2010 16:03:00 Автор Bane т.к.
Цитировать
 Тема :Re:Помогите с программой.. 25-10-2010 13:45:13 
Captain
int main()
Онлайн с: 28-03-2009 11:37:34
Сообщения: 39
Среда обитания
Ну вот мое видение функции 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 т.к.
Цитировать
 Тема :Re:Помогите с программой.. 25-10-2010 17:16:45 
Bane
Hello, world!
Онлайн с: 24-10-2010 11:48:15
Сообщения: 2
Среда обитания
блягодарю))
теперь всё работает,хотя сделано не очень чётко,но я поправлю.
большое спасибо=)
IP сохранен
Цитировать
 Тема :Re:Помогите с программой.. 08-09-2016 01:34:02 
admin
int main()
Онлайн с: 28-03-2009 14:35:46
Сообщения: 1
Среда обитания
Отлично!
IP сохранен
Цитировать
Ответить
Страница # 


Powered by ccBoard