Как перемешать массив случайным образом
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Как перемешать массив случайным образом - 2010-02-24 17:06:41.973333
|
|
|
hromjo
Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
|
Помогите пожалуста. Вот у меня массив char x[100] там числа и знаки перехода на новую строку \n так вопрос. Как перемешать массив случайным образом плюс чтоб \n перемешивались как один знак. Заранее благодарен.
|
|
|
RE: Как перемешать массив случайным образом - 2010-02-24 17:27:41.150000
|
|
|
Lost_boy
Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
|
Первое что приходит на ум, это сделать разброс через второй массив. Придумать псевдослучайное правило разброса самому и перекинуть в другой массив. О_о может бред, но пока других вариантов не вижу, насколько я понял инфа в твоем массиве изначально дана, так что… з.ы. Можно попробовать использовать рандом в промежутке от 0 до 100, и по порядку перемещать элементы с одного массива в другой (номер нового адреса получаем через рандом). Но тут появляются проблемы с повтором и временем, так что не думаю что это удачная идея.
|
|
|
RE: Как перемешать массив случайным образом - 2010-02-24 17:35:44.963333
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
Можно просто через промежуточную переменную менять местами значения элементов массива, где индексы последних герерируются случайно. Ну естественно нужно поставить несколько условий для закрепления. Ну суть такая. quote:
чтоб \n перемешивались как один знак Не путай "\n" и "\\n"
|
|
|
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
|
|
|
RE: Как перемешать массив случайным образом - 2010-02-24 17:47:54.673333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Наиболее тотальный способ, который приходил мне в голову – это взять второй массив такого же размера, заполнить его случайными числами и отсортировать. Причём когда при сортировке будем переставлять два элемента, обязательно переставить местами два элемента с теми же индексами в первом массиве.
|
|
|
RE: Как перемешать массив случайным образом - 2010-02-24 17:49:32.086666
|
|
|
hromjo
Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
|
Спасибо но там про int сказано, а мне char массив надо.
|
|
|
RE: Как перемешать массив случайным образом - 2010-02-24 17:54:50.423333
|
|
|
Lost_boy
Сообщений: 327
Оценки: 0
Присоединился: 2009-03-25 11:07:27.910000
|
Какая разница интовский или чаровский будет массив? Тебе уже предложили несколько вариантов, выбирай что душе угодно.
|
|
|
RE: Как перемешать массив случайным образом - 2010-02-24 18:14:03.500000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: hromjo Спасибо но там про int сказано, а мне char массив надо. это несущественно
|
|
|
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 реализаций, выбирай что хочешь
|
|
|
RE: Как перемешать массив случайным образом - 2010-03-03 15:55:08.860000
|
|
|
niton
Сообщений: 9
Оценки: 0
Присоединился: 2010-03-03 13:41:01.370000
|
/n - одним символом это серьёзно :) /n и есть один символ
|
|
|
RE: Как перемешать массив случайным образом - 2010-03-03 16:09:14.423333
|
|
|
hromjo
Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
|
да знаю уже, просто с виду два символа
|
|
|
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 символа.
|
|
|
RE: Как перемешать массив случайным образом - 2010-03-03 21:46:44.600000
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Ну можно тупо заменить все вхождения \n на хитрый незадействованный символ,а потом выбрать любой и перечисленных методов перемешивания.
|
|
|
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 на хитрый незадействованный символ,а потом выбрать любой и перечисленных методов перемешивания. зачем?
|
|
|
RE: Как перемешать массив случайным образом - 2010-03-04 01:35:54.670000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: Denaturat чушь. если речь идёт о '\n', то это один символ Речь идёт о /n
|
|
|
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 перемешивались как один знак
|
|
|
RE: Как перемешать массив случайным образом - 2010-03-04 08:34:10.610000
|
|
|
hromjo
Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
|
Да я сам уже проверил. В переменной \n будет выглядеть как два символа, на например для этого символа нужен массив char q[1] минимум из двух элементов, а когда осуществляешь с ним ну перемешиваю в массиве то он как один символ работает
|
|
|
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.
|
|
|
|
|