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

Поиск:

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


Новичок



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

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



smile Да, это не подходящее решение, не правильно понял условие. 

Это сообщение отредактировал(а) Evergreen - 23.5.2007, 20:55
PM MAIL   Вверх
Sardar
Дата 6.11.2004, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



[злостный оффтоп]
Akina к сожалению такй подход не работает smile
Все таки QVB гораздо более убогий чем просто VB. Ксатати как в чистом VB делать callback функции и динамически импортировать модули? Еще перегрузки функций не хватает...
Извиняюсь перед участниками за этот оффтоп smile
[/злостный оффтоп]


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


Un salsero
Group Icon


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

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



Цитата(maxim1000 @ 6.11.2004, 11:30)
так что при добавлении к очереди смотрим, не встречается ли там уже такой массив


Цитата(Nobody @ 7.11.2004, 15:03)
Посмотрю, есть ли в моём втором массиве оно или нет.


Ребята smile в теории всё замечательно smile Но КАК смотреть в очереди или массиве без цикла?

Итак ответ на Си++:
Победитель - Sardar.
Код

template <class NUMBER>
NUMBER find(NUMBER * massiv, unsigned length)
{
NUMBER res=massiv[0];
for(unsigned i=1;i<length;i++){res^=massiv[i];}
return res;
}

Пожалуйста, сообщайте ваши персональные ответы сюда, только если ваш ответ будет элегантнее представленного smile smile
[s]
Цитата(ALEXANDRO @ 9.11.2004, 17:26)
на PHP

Гы-Гы Считай, что тоже самое smile

Код

<?
function find($massiv)
{
$res=$massiv[0];
for($i=1;$i<count($massiv);$i++){$res^=($massiv[$i]);}
return $res;

}
print("Ответ: ".find(array(21,7,1,4,7,9,21,43,4,43,1)));
?>



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


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



А что значит ^=?


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
S.A.P.
Дата 9.11.2004, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Secandr @ 9.11.2004, 20:50)
А что значит ^=?
это присваивание с исключающим ИЛИ,
a^=b грубо говоря a=a XOR b
но у меня такое чувство, что в стандартном С++ такого оператора нет.

Это сообщение отредактировал(а) Perchilla - 9.11.2004, 21:05
PM MAIL   Вверх
sergejzr
Дата 9.11.2004, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Цитата(Perchilla @ 9.11.2004, 20:03)
в стандартном С++ такого оператора нет

Как нет? smile smile Ксор был есть и будет есть smile

Ксор одинаковые биты 0,0 или 1,1 скидывает на 0, остаются только разные например:

100101^
111101
011000

То есть, два одинаковых числа дадут 000000 smile Таким образом остаётся только число, которое не имеет пары smile
ПС:
А ещё Ксор это функция сложения векторов в Z2

А ещё её можно записать так

Код

$res=((~$res)&$massiv[$i])|($res&(~$massiv[$i]));


Поскольку ксор это (~А&B)|(~B&A)


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


Бывалый
*


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

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



Цитата
Создать второй массив. Когда число встречается первых раз, записывать его в этот массив. Когда число встречается второй раз, удалять

Интересно а как ты будешь узнавать есть ли в массиве это число?
PM MAIL   Вверх
korob2001
Дата 1.12.2004, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Код

#!/usr/bin/perl
@arr = qw( 21 7 1 4 7 9 21 43 4 43 1 );
map { $temp{ $_ }++ } @arr;
%temp = reverse %temp;
print $temp{ 1 };

Работать будет только в том случае, если в массиве только одно число не имеет пары, все остальные числа могут быть в любом количестве, больше одного.

Это сообщение отредактировал(а) korob2001 - 1.12.2004, 20:30


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
sergejzr
Дата 1.12.2004, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Цитата(korob2001 @ 1.12.2004, 19:28)
Работать будет только в том случае, если в массиве только одно число не имеет пары, все остальные числа могут быть в любом количестве, больше одного.

Ну korob2001, map юзать нечестно! Так я любую проблему в финкцию запихаю, а потом скажу, что она решается одним действием. smile


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


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.11.2004
Где: Tallinn, Estonia

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



Экстремальный вариант:

quicksort(@array)

дальше проходим массив и смотрим - если это первый элемент - следующий, если элемент Н = элементу Н-1, тогда следующий, элсе - ответ...;)
PM MAIL WWW ICQ MSN   Вверх
Secandr
Дата 1.12.2004, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



cybear Если H <> H+1 и H <> H-1


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
sergejzr
Дата 1.12.2004, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Цитата(cybear @ 1.12.2004, 22:23)
quicksort(@array)

Цитата(sergej @ 1.12.2004, 22:20)
Так я любую проблему в финкцию запихаю, а потом скажу, что она решается одним действием.






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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

Ну korob2001, map юзать нечестно! Так я любую проблему в финкцию запихаю, а потом скажу, что она решается одним действием.

А чем map хуже цикла? Можно вместо map поставить for и при этом мы ещё избавимся от двух фигурных скобок. Вот пример:
Код

#!/usr/bin/perl
@arr = qw( 21 7 1 4 7 9 21 43 4 43 1 );
$temp{ $_ }++ for @arr;
%temp = reverse %temp;
print $temp{ 1 };

Можно и while:
Код

#!/usr/bin/perl
@arr = qw( 21 7 1 4 7 9 21 43 4 43 1 );
$temp{ $_ }++ while ( $_ = shift @arr );
%temp = reverse %temp;
print $temp{ 1 };

А вот foreach:
Код

#!/usr/bin/perl
@arr = qw( 21 7 1 4 7 9 21 43 4 43 1 );
$temp{ $_ }++ foreach @arr;
%temp = reverse %temp;
print $temp{ 1 };

Просто, Perl делает свою работу и вариантов, как всегда, несколько. ;))))

Это сообщение отредактировал(а) korob2001 - 2.12.2004, 05:06


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Guest
Дата 13.12.2004, 03:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

@a = qw( 21 7 1 4 7 9 21 43 4 43 1 );

$c{$_}++  for @a;
for (keys %c) { push @d, $_  if $c{$_} == 1 }

print "@d";

  Вверх
ElectricalStorm
Дата 13.12.2004, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



это я был smile

Кстати korob2001 а что будет если начальный массив будет иметь > одного одиночного елемента ? ;)

уверен что ваше решение несработает.


Удалось таки убрать скобки smile

Код

@a = qw(8 21 7 1 4 7 9 21 43 4 43 1 );

$c{$_}++  for @a;
push @d, $c{$_} == 1 ? $_ : next for keys %c;

print "@d";


А вот за один проход ... тока отсортировать надо
Код

@a = qw(8 21 7 1 4 7 9 21 43 4 43 1 );

@a = sort {$a <=> $b } @a;
for (my $i = 0; $i < @a; $i += 2) {
   push @d, $a[$i] != $a[$i+1] ? $a[$i--] : next
}

print "@d";


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


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


 




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


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

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