![]() |
|
Модераторы: Alx, Fixin |
![]()
|
|
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Случайно наткнулся на этот новый и интересный раздел
Я начну с занятной задачки Дано : Массив из чисел каждое число в массиве два раза и только одно не имеет пары Например {21,7,1,4,7,9,21,43,4,43,1} число 9 присутствует один раз. 7,1,4,21,43 имеют пару. Задача: Найти одиночный элемент в одним циклом Примечания: количество елементов известно 0 тоже может быть в массиве smile вообще любое число smile Найти надо именно число, а не его позицию в массиве smile Задачка не новая, но занимательная Это для разминки |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 1 Всего: 32 |
Тут ИМХО важно, в каких пределах могут варьироваться числа и какое их количество.
-------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Нет, всё пофиг
|
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 1 Всего: 32 |
Ну, могу предложить такое решение: при вводе ищем назад по массиву. Если такое число уже встречалось, то стираем его (ну например вместо него пишем нуль). Иначе добавлем в массив.
Минусы решения: массив займет много памяти, и очень много времени. Наверное есть проще решение... -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
0 тоже может быть в массиве
А как мы узнаем, что такое число уже встречалось? Добавлено @ 02:04 Кстати, найти надо именно число, а не его позицию в массиве |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 1 Всего: 32 |
Млин, встречался я уже с этой задачей, только сейчас на ночь глядя что-то не думается. Завтра...
-------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Времени у нас навалом
|
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
А дополнительной памятью пользоватся можно? Например можно создать битовое(2 битовое) множество и добавлять в него найденные элементы. В принципе памяти на доп. структуру уйдет мало.
Добавлено @ 11:14 Я догнал Можно пробежатся по массиву и соединить все элементы XOR'ом, все двойные исчезнут. Правда работать бдует только если убираемые элементы встречаются четное количества раз, искомый элемнент всего один и встречается не четное количество раз. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 2 Всего: 454 |
Это сообщение отредактировал(а) Akina - 5.11.2004, 11:43 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Елки 8 минут потребовалось, а чуть было такие мудрённые структуры и фичи не нагородил
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 2 Всего: 454 |
Sardar
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Действительно работать будет только с целыми числами. Я предложил два решения, первое требует дополнительной памяти и расчётов, второе самое простое, но имеет ряд ограничений и условий.
[оффтоп] Не в обиду сказанно
Приходится извращатся с isMissing и isEmpty, все это во вложенных if'ах, потому как быстрых логических && и || нет, а and и or вычислят оба операндам что приводит к ошибке. Самый глючный, самый безобразный, самый не удобный, самый обьемный, самый убогий язык... Ноя говорю не о чистом VB, a o QVB, просто наболело за пару месяцев... [/оффтоп] -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Akina |
|
||||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 2 Всего: 454 |
Sardar
Добавлено @ 14:42 Sardar
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||
|
|||||||
| Nobody |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: нет Всего: 16 |
Создать второй массив. Когда число встречается первых раз, записывать его в этот массив. Когда число встречается второй раз, удалять. В итоге у нас получится массив из одного элемента, который и есть искомое число. В принципе при таком подходе совершенно не важно общее количество элементов.
-------------------- |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Nobody да, но суть задачи - все это сделать за один цикл.
|
|||
|
||||
| Evergreen |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 30.3.2004 Где: Москва Репутация: нет Всего: 3 |
Это сообщение отредактировал(а) Evergreen - 23.5.2007, 20:55 |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
[злостный оффтоп]
Akina к сожалению такй подход не работает Все таки QVB гораздо более убогий чем просто VB. Ксатати как в чистом VB делать callback функции и динамически импортировать модули? Еще перегрузки функций не хватает... Извиняюсь перед участниками за этот оффтоп [/злостный оффтоп] -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| sergejzr |
|
||||||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Ребята Итак ответ на Си++: Победитель - Sardar.
Пожалуйста, сообщайте ваши персональные ответы сюда, только если ваш ответ будет элегантнее представленного [s]
Гы-Гы Считай, что тоже самое
|
||||||||||
|
|||||||||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
А что значит ^=?
|
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
a^=b грубо говоря a=a XOR b но у меня такое чувство, что в стандартном С++ такого оператора нет. Это сообщение отредактировал(а) Perchilla - 9.11.2004, 21:05 |
|||
|
||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Как нет? Ксор одинаковые биты 0,0 или 1,1 скидывает на 0, остаются только разные например: 100101^ 111101 011000 То есть, два одинаковых числа дадут 000000 ПС: А ещё Ксор это функция сложения векторов в Z2 А ещё её можно записать так
Поскольку ксор это (~А&B)|(~B&A) |
||||
|
|||||
| Garabar |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 15.9.2004 Репутация: нет Всего: 1 |
Интересно а как ты будешь узнавать есть ли в массиве это число? |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: нет Всего: 61 |
Работать будет только в том случае, если в массиве только одно число не имеет пары, все остальные числа могут быть в любом количестве, больше одного. Это сообщение отредактировал(а) korob2001 - 1.12.2004, 20:30 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Ну korob2001, map юзать нечестно! Так я любую проблему в финкцию запихаю, а потом скажу, что она решается одним действием. |
|||
|
||||
| cybear |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.11.2004 Где: Tallinn, Estonia Репутация: нет Всего: нет |
Экстремальный вариант:
quicksort(@array) дальше проходим массив и смотрим - если это первый элемент - следующий, если элемент Н = элементу Н-1, тогда следующий, элсе - ответ...;) |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
cybear Если H <> H+1 и H <> H-1
|
|||
|
||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
|
||||
|
|||||
| korob2001 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: нет Всего: 61 |
А чем map хуже цикла? Можно вместо map поставить for и при этом мы ещё избавимся от двух фигурных скобок. Вот пример:
Можно и while:
А вот foreach:
Просто, Perl делает свою работу и вариантов, как всегда, несколько. ;)))) Это сообщение отредактировал(а) korob2001 - 2.12.2004, 05:06 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
| Guest |
|
|||
|
Unregistered |
|
|||
|
||||
| ElectricalStorm |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
это я был
Кстати korob2001 а что будет если начальный массив будет иметь > одного одиночного елемента ? ;) уверен что ваше решение несработает. Удалось таки убрать скобки
А вот за один проход ... тока отсортировать надо
Это сообщение отредактировал(а) ElectricalStorm - 13.12.2004, 04:04 -------------------- Нужно знать инструмент, которым пользуешься |
||||
|
|||||
| korob2001 |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: нет Всего: 61 |
О том, что будет читай выше.
Нормально, но вся проблема в том, что здесь два цикла, а нужо <= 1. Так написано в условии. ;)))))
Решение отличное, но здесь человека, начавшего эту тему, может смутить вот эта строка:
потому как такой пример не подошёл:
Это сообщение отредактировал(а) korob2001 - 13.12.2004, 07:57 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||
|
|||||||||||
| Guest |
|
|||
|
Unregistered |
должно работать. Это сообщение отредактировал(а) ALEXANDRO - 19.12.2004, 02:53 |
|||
|
||||
| Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: нет Всего: 1 |
опять забыл зайти по нормальному
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
Vladimir13
мы юзаем теги {code} и пишем, что за язык Добавлено @ 02:53 надеюсь я прально понял, это Delphi? |
|||
|
||||
| Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: нет Всего: 1 |
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
Vladimir13
я, может, и понял, только вот кто-то другой наверняка не понял... ведь не так трудно написать, да? |
|||
|
||||
| Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: нет Всего: 1 |
ну, извините, учту на будущее.
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |