Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть два числа. Нужно найти все числа между ними, Случайным образом! 
:(
    Опции темы
Wowa
Дата 13.11.2005, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Есть два числа. Нужно найти все числа между ними, но случайным образом! Т.е. через Math.random.
Числа не должны повторятся.

И при генерировании нового случайного числа, не допускается переборка всего массива с целью проверки было ли это число уже найдено или нет.


Давайте подумаем над этим алгоритмом.

У меня есть такие идеи: нужно найти разницу между числами А и Б. Создать массив этой длины.
И просто потом генерировать числа и записывая их в нужные ячейки массива.
PM WWW   Вверх
cardinal
Дата 13.11.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



То есть числа целые как я понял (1, 2, 3 и т.д.)?

Тогда надо как бы умножать то, что возвращает Math.random, то есть надо знать диапазон чисел. И так вопрос smile чсила идут от 1 до 10, от 10 до 100 или как?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
hiHo
Дата 13.11.2005, 16:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Попробуй так

Пример у тебя числа с М1 по М2

1) Копируешь все по порядку в массив (длинна массива М2-М1+1) .
2) Берешь случайный на его место ставишь последний количество уменьшаешь на 1.
3) и тд пока массив не станит пустым.
  Вверх
Wowa
Дата 13.11.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(cardinal @ 13.11.2005, 14:44)
чсила идут от 1 до 10, от 10 до 100 или как?

да, как угодно могут идти. Как задать, так и будут идти.

Числа - целые.
Добавлено @ 16:55
Цитата(cardinal @ 13.11.2005, 14:44)
Тогда надо как бы умножать то, что возвращает Math.random

На что умножать?
PM WWW   Вверх
sergejzr
Дата 13.11.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



насчёт массива - правильно. В нём отмечать числа, которые уже найдены. Только вот придётся имхо сегменты вводить. то есть первое найденное число разобьёт диапазон на 2 сегмента, второе на 3 или останется 2. Если исключим 0, то ксор границ даст 0 , если диапазон заполнен полностью. Короче мудрённый алгоритм получится. Не знаю, стоит ли овчинка выделки.

А вот простой алгоритм ты описал вроде. грубо говоря:

Код

  int cnt=0;//найденные числа
  int min=5,max=15;
  int interval=max-min;
  while(cnt<interval)  
  {
    int r;
    for(r=random(max,min); massiv[r]; r=random(max,min));
    massiv[r]=true;//нашли очередное число
    cnt++;
 }


конечно под конец находить будет долго, но это самое простое решение. Игаче надо думать про сегменты..


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


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(sergej @ 13.11.2005, 14:55)
Игаче надо думать про сегменты..

ну, сегменты не самое страшное. Но у меня нет мыслей, как их тут использовать.
PM WWW   Вверх
Akina
Дата 13.11.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



создаем двумерный массив
Код
dim Array(0 to 1, MinNum to MaxNum)
заполняем
Код
for i = MinNum to MaxNum
    Array(0,i) = Random
    Array(1,i) = i
next i
сортируем по 0-му столбцу
Код
Array.Sort(0,Ascending)
выводим результат
Код

for i = MinNum to MaxNum
    Print Array(1,i)
next i



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

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


Инженер
****


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

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



Цитата(Wowa @ 13.11.2005, 14:25)
Нужно найти все числа между ними, но случайным образом!

Akina, а ты предлагаешь не искать их случайным образом, а расбросать случайным образом. smile

Но вообще очень хитро! smile

Если Wow'у устроит разбрасывание чисел, то почему бы и нет...
Добавлено @ 20:16
Цитата(Wowa @ 13.11.2005, 14:54)
На что умножать?

Ну на 10, на 100... Просто привык, что Random возвращает числа в интевале 0..1.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Rick
Дата 13.11.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



идеально подходят множества, но всего от 0 до 255
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
Graf Zeppelin
Дата 13.11.2005, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А может через генерацию списка и выбора с удалением?
--------------------
Jah, help me!
PM MAIL   Вверх
Wowa
Дата 13.11.2005, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Graf @ 13.11.2005, 20:23)
А может через генерацию списка и выбора с удалением?

а подробннее? Как удаление делать будешь, если не допускается перебор всего массива.
PM WWW   Вверх
Akina
Дата 13.11.2005, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(cardinal @ 13.11.2005, 21:15)
ты предлагаешь не искать их случайным образом, а расбросать случайным образом

ясен пень... просто условия
Цитата(Wowa @ 13.11.2005, 17:25)
Нужно найти все числа между ними, но случайным образом!
и
Цитата(Wowa @ 13.11.2005, 17:25)
не допускается переборка всего массива с целью проверки было ли это число уже найдено или нет
с учетом упора на выделенное противоречат друг другу.

И вообще в контексте задачи я не понимаю термина "найти"... вывести все, но в случайном порядке? мой алгоритм это делает... что-то другое? объясните что именно, у меня фантазии не хватает.


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

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


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Akina @ 13.11.2005, 20:35)
с учетом упора на выделенное противоречат друг другу.

почему противоречат? smile
PM WWW   Вверх
Akina
Дата 13.11.2005, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Wowa @ 13.11.2005, 23:38)
почему противоречат?

Почему? потому что очередное сгенерированное СЛУЧАЙНО число из заданного диапазона имеет право быть найденным ранее. А проверить так это или нет можно только сравнением с ранее найденными, т.е. сканирование найденных. Противоречие.


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

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


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Akina @ 13.11.2005, 20:43)

Почему? потому что очередное сгенерированное СЛУЧАЙНО число из заданного диапазона имеет право быть найденным ранее. А проверить так это или нет можно только сравнением с ранее найденными, т.е. сканирование найденных. Противоречие.

противоречия нет. Если первое число 100, а второе 200. То создаем массив на 100 элементов. Обнуляем его.
И если какое-то число найдено, то пишем его в массив по индексу этого самого числа, если же array[random]!=0

Где тут противоречие? smile Ключевое слово было:

Цитата(Wowa @ 13.11.2005, 14:25)
не допускается переборка всего массива


Или же второй вариант - поиграть с знаками больше, меньше при нахождении чисел...



PM WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




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


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

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