Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чётность/нечётность 
V
    Опции темы
Arden
Дата 23.1.2009, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 23.1.2009
Где: Украина, Волынь

Репутация: нет
Всего: нет



Здравствуйте.
Решил сесть за С++. В учебнике в разделе о массивах следующая задача:
Вычислить сумму (произведение) чётных (нечётных) элементов массива:
а) можно использовать операцию % ;
б) можно использовать только явное или неявное приведение типа (int);

собственно это всё просто, если бы не вариант:
в) нельзя использовать какие либо функции или операцию %, явное или неявное приведение типов.

Возможно, это всё элементарно, но я просто "завис". 2 часа ночи, может с утра голова заработаетsmile Вообщем пока мне в голову не пришло как определить чётность/нечётность числа, не имея под рукой ничего. 
Заранее спасибо. Извините, если что не так. Программирую меньше недели. В поиске такой же проблемы не нашел.

Это сообщение отредактировал(а) Arden - 23.1.2009, 14:57
PM MAIL   Вверх
Kallikanzarid
Дата 23.1.2009, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



a & 1 дает истину, когда число нечетное.
PM MAIL   Вверх
Arden
Дата 23.1.2009, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 23.1.2009
Где: Украина, Волынь

Репутация: нет
Всего: нет



Код

int a;
cin>>a;
if(a&1) cout<<"Нечетное"<<endl;
if(!(a&1)) cout<<"Четное"<<endl;


Спасибо. Всё прекрасно работает. Но вот я сомневаюсь, что авторы подразумевали именно такое решение этой задачи, учитывая, что нигде в книге я не встречал такого варианта использования операции &. Это единственный способ?

Это сообщение отредактировал(а) Arden - 23.1.2009, 04:27
PM MAIL   Вверх
mes
Дата 23.1.2009, 04:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Arden @  23.1.2009,  02:09 Найти цитируемый пост)
а) можно использовать операцию % ;

Цитата(Arden @  23.1.2009,  02:09 Найти цитируемый пост)
в) нельзя использовать какие либо функции или операцию %, 

так можно или нельзя использовать % ? 
если можно то if (а%2) нечетное.

Это сообщение отредактировал(а) mes - 23.1.2009, 04:30


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 23.1.2009, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



лучшего способа проверить на четность чем выделить младший двоичный разряд числа ,быть не может
для четных элементов массива их надо считать по формуле n*2 или n=n+2


Это сообщение отредактировал(а) GoldFinch - 23.1.2009, 09:20
PM MAIL ICQ   Вверх
MAKCim
Дата 23.1.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Код

int i = 0, k = 1;
for (; n--; i += k, k = -k);
return i == 0;



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mes
Дата 23.1.2009, 10:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



if (a== (a>>1<<1))


--------------------
PM MAIL WWW   Вверх
Arden
Дата 23.1.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 23.1.2009
Где: Украина, Волынь

Репутация: нет
Всего: нет



Цитата(mes @ 23.1.2009,  03:29)
Цитата(Arden @  23.1.2009,  02:09 Найти цитируемый пост)
а) можно использовать операцию % ;

Цитата(Arden @  23.1.2009,  02:09 Найти цитируемый пост)
в) нельзя использовать какие либо функции или операцию %, 

так можно или нельзя использовать % ? 
если можно то if (а%2) нечетное.

Стоит задача решить тремя разными способами, тоесть три разных кода.

Добавлено через 2 минуты и 27 секунд
MAKCim, большое спасибо. Вот теперь я въехал smile 
PM MAIL   Вверх
mes
Дата 23.1.2009, 15:14 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(MAKCim @  23.1.2009,  08:37 Найти цитируемый пост)
int i = 0, k = 1;
for (; n--; i += k, k = -k);
return i == 0;

тот же пример, но через xor:
Код

int i=0;  // можно вместо int использовать bool, тогда цифры для наглядности заменить на true и false  соответственно;
for (; n--; i^=1);
return (i==0);


Это сообщение отредактировал(а) mes - 23.1.2009, 15:18


--------------------
PM MAIL WWW   Вверх
Arden
Дата 23.1.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 23.1.2009
Где: Украина, Волынь

Репутация: нет
Всего: нет



Код

int i=0;
for (; n--; i^=1);
return (i==0);

Выход из цикла нравится, как то не додумался раньше, что так можно. Вообще меня удивляет как Вы иногда весь алгоритм умудряетесь засунуть в голову цикла. Иногда даже трудно понять что к чему. Хз сколько мне времени понадобится, чтобы научиться так изворачиватьсяsmile Я бы это всё расписывал еще в {пару строк}.
Спасибо еще раз.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.