Модераторы: Alx, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> найти в массиве неповторяющееся число, массив из повторяющихся чисел 
:(
    Опции темы
sergejzr
Дата 5.11.2004, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Случайно наткнулся на этот новый и интересный раздел smile

Я начну с занятной задачки smile
Дано : Массив из чисел каждое число в массиве два раза и только одно не имеет пары
Например {21,7,1,4,7,9,21,43,4,43,1} число 9 присутствует один раз. 7,1,4,21,43 имеют пару.

Задача: Найти одиночный элемент в одним циклом

Примечания:
количество елементов известно
0 тоже может быть в массиве smile вообще любое число smile
Найти надо именно число, а не его позицию в массиве smile


Задачка не новая, но занимательная smile
Это для разминки smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fedor
Дата 5.11.2004, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Тут ИМХО важно, в каких пределах могут варьироваться числа и какое их количество.


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
sergejzr
Дата 5.11.2004, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Нет, всё пофиг smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fedor
Дата 5.11.2004, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Ну, могу предложить такое решение: при вводе ищем назад по массиву. Если такое число уже встречалось, то стираем его (ну например вместо него пишем нуль). Иначе добавлем в массив.

Минусы решения: массив займет много памяти, и очень много времени.

Наверное есть проще решение... smile


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
sergejzr
Дата 5.11.2004, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



0 тоже может быть в массиве smile вообще любое число smile
А как мы узнаем, что такое число уже встречалось?
Добавлено @ 02:04
Кстати, найти надо именно число, а не его позицию в массиве smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fedor
Дата 5.11.2004, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Млин, встречался я уже с этой задачей, только сейчас на ночь глядя что-то не думается. Завтра...


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
sergejzr
Дата 5.11.2004, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Времени у нас навалом smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 5.11.2004, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



А дополнительной памятью пользоватся можно? Например можно создать битовое(2 битовое) множество и добавлять в него найденные элементы. В принципе памяти на доп. структуру уйдет мало.
Добавлено @ 11:14
Я догнал smile
Можно пробежатся по массиву и соединить все элементы XOR'ом, все двойные исчезнут. Правда работать бдует только если убираемые элементы встречаются четное количества раз, искомый элемнент всего один и встречается не четное количество раз.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Akina
Дата 5.11.2004, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Код

Private Sub Command1_Click()
strtmp = ""
For i = LBound(Mass) To UBound(Mass)
  strNext = cStr(Mass(i))
  lngPos = InStr(strtmp, strNext)
  If lngPos = 0 Then
     strtmp = strtmp & Left(strNext & Space(20), 20)
  Else
     Mid(strtmp, lngPos, 20) = Space(20)
  End If
Next i
Debug.Print Val(Trim(strtmp))
End Sub


Это сообщение отредактировал(а) Akina - 5.11.2004, 11:43


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Sardar
Дата 5.11.2004, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Елки 8 минут потребовалось, а чуть было такие мудрённые структуры и фичи не нагородил smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Akina
Дата 5.11.2004, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Sardar
Цитата
Можно пробежатся по массиву и соединить все элементы XOR'ом, все двойные исчезнут.
Это очевидно, но работать будет только если ВСЕ элементы - одного типа, скажем целые или одинарной точности... а если Variant?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Sardar
Дата 5.11.2004, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Действительно работать будет только с целыми числами. Я предложил два решения, первое требует дополнительной памяти и расчётов, второе самое простое, но имеет ряд ограничений и условий.

[оффтоп]
Не в обиду сказанно smile На работе так хлебаю QVB(диалект VB), что только упоминание о нём еще где либо наводит скуку. Сегодня подкинул такую лажу:
Код

sub blabla(test as Double, optional bla as Variant)
 if bla then
   'большой облом если bla не указан, типа empty это не левый(не числовой) тип
   'логично же что если не указан, то это FALSE
 end if
....
end sub

Приходится извращатся с isMissing и isEmpty, все это во вложенных if'ах, потому как быстрых логических && и || нет, а and и or вычислят оба операндам что приводит к ошибке.

Самый глючный, самый безобразный, самый не удобный, самый обьемный, самый убогий язык...
Ноя говорю не о чистом VB, a o QVB, просто наболело за пару месяцев...
[/оффтоп]


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Akina
Дата 5.11.2004, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Sardar
Цитата
Действительно работать будет только с целыми числами.
ну необязательно... вещественные типы имеют тоже битовое представление (4-8-10 байт) и их вполне можно ксорить...
Добавлено @ 14:42
Sardar
Код

optional bla as Variant
а такого понятия как значение по дефолту - нету?
Код

optional bla as Variant = False
?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Nobody
Дата 6.11.2004, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

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



Создать второй массив. Когда число встречается первых раз, записывать его в этот массив. Когда число встречается второй раз, удалять. В итоге у нас получится массив из одного элемента, который и есть искомое число. В принципе при таком подходе совершенно не важно общее количество элементов.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
S.A.P.
Дата 6.11.2004, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Nobody да, но суть задачи - все это сделать за один цикл.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




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


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

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