Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.07.2009, 03:16
hrimz вне форума Посмотреть профиль Отправить личное сообщение для hrimz Найти все сообщения от hrimz
  № 1  
Ответить с цитированием
hrimz
 
Аватар для hrimz

Регистрация: Sep 2005
Сообщений: 33
По умолчанию Math.random - процент выпадания

Подскажите пожалуйста каким образом можно регулировать процент выпадания определенных чисел, например 111 - 30% выпадания, 222 - 20% выпадания, 555 - 10% выпадания и т.д. Из общего диапазона от 001 до 999.

Как лучше генерировать - сразу трехзначное число или отдельно каждый разряд?

Есть такая функция для генерации чисел из заданного диапазона:

Код AS3:
function randRangeInt (low:uint, high:uint)
{
return Math.floor (Math.random() * (high - low + 1) + low);
}

Старый 19.07.2009, 04:26
ripeLime вне форума Посмотреть профиль Отправить личное сообщение для ripeLime Найти все сообщения от ripeLime
  № 2  
Ответить с цитированием
ripeLime
 
Аватар для ripeLime

Регистрация: Jul 2009
Сообщений: 25
Рандом на то он и рандом, что шанс выпасть числу 9 из диапазона 1-1000 такой же, как и числу 899.

Первая идея, которая пришла в голову для решения вашей проблемы:

Закидываем числа от 1 до 999 в массив и обращаемся к случайному элементу массива array[Случайный номер] - шанс выпасть нужному вам числу(скажем 18) одинаков и равен 1/999, поэтому продливаем массив до 1000 элементов и загоняем туда нужный вам элемент(всё тоже число 18).
Теперь обращаемся к случайному элементу массива array[Случайный номер], только теперь, шанс выпасть нужному вам числу равен 2/1000, то есть в 2 раза больше чем у остальных чисел.


Последний раз редактировалось ripeLime; 19.07.2009 в 16:33.
Старый 19.07.2009, 10:15
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 3  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Подитожу:
заводим массив, в котором частота появления каждого числа пропорциональна нужной вам вероятности его выпадения. Далее случайным образом выбираем номер элемента массива и все.

Старый 19.07.2009, 10:47
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 4  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Только не надо делать действительно массив. Вместо него должны быть условия - если случайное число в определённом диапазоне, то возращать определённое значение.

Старый 19.07.2009, 14:14
Dima_DPE вне форума Посмотреть профиль Отправить личное сообщение для Dima_DPE Найти все сообщения от Dima_DPE
  № 5  
Ответить с цитированием
Dima_DPE

блогер
Регистрация: Aug 2005
Сообщений: 178
Записей в блоге: 4
А можно и так
Код AS3:
function rand():int
{
var rnd:Number = Math.random();
if (rnd < 0.3) return 111; // 30% выпадения
if (rnd < 0.5) return 222; // 20% + 30% из предыдущего
if (rnd < 0.6) return 555; // 10% 
return int(rnd * 1000);
}
Единственно, что процент 111 222 и 555 будет чуть больше 30%, 20% и 10% соответственно, но до тысячи выпаданий погрешность предельно мала.

Старый 19.07.2009, 17:38
twix1124 вне форума Посмотреть профиль Отправить личное сообщение для twix1124 Найти все сообщения от twix1124
  № 6  
Ответить с цитированием
twix1124
[+4 05.07.09]

Регистрация: Jun 2009
Сообщений: 114
Первая мысль была такой же=)
Но 0.6 - это 60% =\

Старый 19.07.2009, 20:30
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
60%, что выпадет 555, если не выпадет вот это:
Код AS3:
if (rnd < 0.3) return 111; // 30% выпадения
if (rnd < 0.5) return 222; // 20% + 30% из предыдущего
То есть 60% от 70% от 50%, как то так.

Старый 19.07.2009, 21:23
Dima_DPE вне форума Посмотреть профиль Отправить личное сообщение для Dima_DPE Найти все сообщения от Dima_DPE
  № 8  
Ответить с цитированием
Dima_DPE

блогер
Регистрация: Aug 2005
Сообщений: 178
Записей в блоге: 4
Psycho Tiger, именно, спасибо, а то у меня даже не было слов, как twix1124 намекнуть, что надо читать мат часть, а потом...

Старый 19.07.2009, 21:36
hrimz вне форума Посмотреть профиль Отправить личное сообщение для hrimz Найти все сообщения от hrimz
  № 9  
Ответить с цитированием
hrimz
 
Аватар для hrimz

Регистрация: Sep 2005
Сообщений: 33
Всем спасибо огромное!

Старый 20.07.2009, 00:58
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 10  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
точно такой же код хотел написать днём, но подумал, что не совсем понял вопрос. Если нужно точно 30,20 и 10 процентов, то можно так:
Код AS3:
function rand():int
{
var rnd:Number = Math.random();
if (rnd < 0.3) return 111; // 30% выпадения
if (rnd < 0.5) return 222; // 20% + 30% из предыдущего
if (rnd < 0.6) return 555; // 10% 
var i:int;
do
{ i=int(rnd * 1000) }
while((i==111)||(i==222)||(i==555));
return i;
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.