Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как перемешать массив случайным образом

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Как перемешать массив случайным образом
Имя
Сообщение << Старые топики   Новые топики >>
Как перемешать массив случайным образом - 2010-02-24 17:06:41.973333   
hromjo

Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
Помогите пожалуста. Вот у меня массив char x[100] там числа и знаки перехода на новую строку \n так вопрос. Как перемешать массив случайным образом плюс чтоб \n перемешивались как один знак. Заранее благодарен.
Post #: 1
RE: Как перемешать массив случайным образом - 2010-02-24 17:27:41.150000   
Lost_boy

Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
Первое что приходит на ум, это сделать разброс через второй массив. Придумать псевдослучайное правило разброса самому и перекинуть в другой массив. О_о может бред, но пока других вариантов не вижу, насколько я понял инфа в твоем массиве изначально дана, так что…
з.ы. Можно попробовать использовать рандом в промежутке от 0 до 100, и по порядку перемещать элементы с одного массива в другой (номер нового адреса получаем через рандом). Но тут появляются проблемы с повтором и временем, так что не думаю что это удачная идея.
Post #: 2
RE: Как перемешать массив случайным образом - 2010-02-24 17:35:44.963333   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Можно просто через промежуточную переменную менять местами значения элементов массива, где индексы последних герерируются случайно. Ну естественно нужно поставить несколько условий для закрепления. Ну суть такая.

quote:

чтоб \n перемешивались как один знак

Не путай "\n" и "\\n"
Post #: 3
RE: Как перемешать массив случайным образом - 2010-02-24 17:41:17.136666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
Post #: 4
RE: Как перемешать массив случайным образом - 2010-02-24 17:47:54.673333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Наиболее тотальный способ, который приходил мне в голову – это взять второй массив такого же размера, заполнить его случайными числами и отсортировать. Причём когда при сортировке будем переставлять два элемента, обязательно переставить местами два элемента с теми же индексами в первом массиве.
Post #: 5
RE: Как перемешать массив случайным образом - 2010-02-24 17:49:32.086666   
hromjo

Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
Спасибо но там про int сказано, а мне char массив надо.
Post #: 6
RE: Как перемешать массив случайным образом - 2010-02-24 17:54:50.423333   
Lost_boy

Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
Какая разница интовский или чаровский будет массив? Тебе уже предложили несколько вариантов, выбирай что душе угодно.
Post #: 7
RE: Как перемешать массив случайным образом - 2010-02-24 18:14:03.500000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: hromjo

Спасибо но там про int сказано, а мне char массив надо.


это несущественно
Post #: 8
RE: Как перемешать массив случайным образом - 2010-02-24 18:16:23.503333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
http://rosettacode.org/wiki/Knuth_shuffle

вот тебе over 9000 реализаций, выбирай что хочешь
Post #: 9
RE: Как перемешать массив случайным образом - 2010-03-03 15:55:08.860000   
niton

Сообщений: 9
Оценки: 0
Присоединился: 2010-03-03 13:41:01.370000
/n - одним символом это серьёзно :) /n и есть один символ
Post #: 10
RE: Как перемешать массив случайным образом - 2010-03-03 16:09:14.423333   
hromjo

Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
да знаю уже, просто с виду два символа
Post #: 11
RE: Как перемешать массив случайным образом - 2010-03-03 16:47:59.156666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333


quote:

ORIGINAL: niton

/n - одним символом это серьёзно :) /n и есть один символ

С точки зрения C, C++, Java, JS, C# и т.п. это 2 символа.
Post #: 12
RE: Как перемешать массив случайным образом - 2010-03-03 21:46:44.600000   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
Ну можно тупо заменить все вхождения \n на хитрый незадействованный символ,а потом выбрать любой и перечисленных методов перемешивания.
Post #: 13
RE: Как перемешать массив случайным образом - 2010-03-03 22:22:50.546666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: _SaZ_

С точки зрения C, C++, Java, JS, C# и т.п. это 2 символа.


чушь. если речь идёт о '\n', то это один символ

quote:

ORIGINAL: Genco

Ну можно тупо заменить все вхождения \n на хитрый незадействованный символ,а потом выбрать любой и перечисленных методов перемешивания.


зачем?
Post #: 14
RE: Как перемешать массив случайным образом - 2010-03-04 01:35:54.670000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: Denaturat
чушь. если речь идёт о '\n', то это один символ

Речь идёт о /n
Post #: 15
RE: Как перемешать массив случайным образом - 2010-03-04 01:44:09.076666   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
quote:

зачем?
Ну кто то вон говорит,что символов будет 2, хз, я подумал что может быть там в одном символе "\", а в другом - английская n…. вообще не понял загвоздки.

quote:

Речь идёт о /n
Эмм….ну а как бы:
quote:

Как перемешать массив случайным образом плюс чтоб \n перемешивались как один знак
Post #: 16
RE: Как перемешать массив случайным образом - 2010-03-04 08:34:10.610000   
hromjo

Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
Да я сам уже проверил. В переменной \n будет выглядеть как два символа, на например для этого символа нужен массив char q[1] минимум из двух элементов, а когда осуществляешь с ним ну перемешиваю в массиве то он как один символ работает
Post #: 17
RE: Как перемешать массив случайным образом - 2010-03-04 08:52:43.980000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Так, хватит путать себя и окружающих.
Компилятор разбирая строку заменяет \n на символ с кодом 10. На один символ. Разговор про "два символа" _SaZ_ завёл к тому, что /n – это действительно два символа: слэш и `n'. Всякие эти буковки компилятор пишет так же как и читает. Но если компилятор видит обратный слэш – `\', он считает что началась esc-последовательность, и следующий символ определит какая именно. Компилятор берёт следующий символ и пишет в объектник 1 символ.
\n компилятор меняет на 10,
\r – на 13
\t – на 9
\\ – на 92, это код символа \
hromjo, ты как-то не так проверял. Возьми, скомпилируй и запусти такое:
printf ("length of \\n is %d; length of /n is: %d\n", strlen ("\n"), strlen ("/n"));
Есть правда ещё одно "но", которое может сбить с толку. Всякие там FILE* и fstream открытые в текстовом режиме могут выводить наружу вместо \n последовательность символов \r\n (это два символа, понятно ведь? не четыре, это CR и LF). Но это связано с внешним представлением перевода строки. Внешним по отношению к программе. Внутри же программы \n – это ровно один байт, один символ, один char.
Post #: 18
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как перемешать массив случайным образом







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.