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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.11.2008, 13:54
Alexsas вне форума Посмотреть профиль Отправить личное сообщение для Alexsas Посетить домашнюю страницу Alexsas Найти все сообщения от Alexsas
  № 1  
Ответить с цитированием
Alexsas

Регистрация: May 2007
Сообщений: 106
Отправить сообщение для Alexsas с помощью ICQ Отправить сообщение для Alexsas с помощью Skype™
По умолчанию Массив из уникальных случайных чисел.

Добрый день.
Я тут запутался. Хочу чтобы добрые люди показали выход.

Требуется в массив из ста элементоа загнать числа от одного до ста, но чтобы они не повторялись среди элементов массива.

Знаю задача простая, но в ней погряз. Вроде бы принцып прост.
Сгенерил число. Побежал по элементам если встретил, генеришь снова, если нет следующий.
Но выстроить в грамотный код немогу.

Старый 21.11.2008, 14:02
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
1. Сгенерировать временный массив Temp чисел 1-100
2. В цикле брать случайное число R в пределах длины Temp.
3. Взять элемент с индексом R из Temp, поместить значение элемента в массив случайных чисел Rand и удалить элемент R из Temp (длинна массива изменится). И так до конца цикла.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.11.2008, 14:11
Alexsas вне форума Посмотреть профиль Отправить личное сообщение для Alexsas Посетить домашнюю страницу Alexsas Найти все сообщения от Alexsas
  № 3  
Ответить с цитированием
Alexsas

Регистрация: May 2007
Сообщений: 106
Отправить сообщение для Alexsas с помощью ICQ Отправить сообщение для Alexsas с помощью Skype™
Спасибо!

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

Регистрация: May 2006
Сообщений: 36
Код AS3:
trace (getRandomIntArray(100));
 
function getRandomIntArray (len:int):Array {
  var A:Array = [];
  var i:int;
  var found:Boolean = false;
  var un:int;
 
  while (A.length != len) {
    un = Math.random()*len;
	found = false;
    for (i = 0; i < A.length; i++) {
        if (A[i] == un) {
          found = true;
          break;
        }
    }
    if (!found) A.push(un);
  }
 
  return A;
}
Есть способ уменьшить "холостые" генерации случайного числа. Заранее создать массив 1 ... N, и пермешать его. Работает в два раза быстрее, но предлагаю вам подумать об этом самостоятельно.

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

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
вот вам вариант без массива(генерация псевдослучайной последовательности):

Код AS3:
package  {
	/**
	 * ...
	 * @author Anton Bodrichenko
	 * @usage  
	 * 			Utils.numRandomSeed = Math.floor(Math.random()*200);
	 *			trace(Utils.getRandomValue(52));
	 *			trace(Utils.getRandomValue(52));
	 *			trace(Utils.getRandomValue(52));
	 * 
	 */
	public class Utils 
	{
		private static const A:int = 3423313;
		private static const C:int = 2435;
		//private static var numSeedCnt:int = 0;
		public static var numRandomSeed:int;
 
		public function Utils() 
		{
 
		}
		public static function getRandomValue($maxvalue:int):int {
			numRandomSeed = (numRandomSeed*A)%2147352576;
			var result:int = (Math.floor((numRandomSeed*$maxvalue)/C))%$maxvalue;
			return (result);
		}
	}
 
}
__________________
: M F N W :

Старый 21.11.2008, 15:13
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от Fernando Costa Посмотреть сообщение
вот вам вариант без массива(генерация псевдослучайной последовательности)
И как с помощью этого заполнить массив от 1 до 100?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.11.2008, 16:27
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 7  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
Код AS3:
var arr:Array = ["a","b","c","d","e","f","g","h","i","j"];
var numRandom:int;
var saveStr:String;
 
Utils.numRandomSeed = 5;
for (var i:int = 0; i < arr.length; i++) {
	saveStr = arr[i];
	numRandom = Utils.getRandomValue(arr.length);
	arr[i] = arr[numRandom];
	arr[numRandom] = saveStr;
}
trace(arr);
весь смысл в том, что при указанном значении Utils.numRandomSeed массив каждый раз сортируется одинаково
__________________
: M F N W :

Старый 25.11.2008, 11:18
d4lt вне форума Посмотреть профиль Отправить личное сообщение для d4lt Найти все сообщения от d4lt
  № 8  
Ответить с цитированием
d4lt

Регистрация: Nov 2008
Сообщений: 6
Обычный вопрос на собеседовании, который решается и реализуется минуты за 3.
Алгоритм тут простой, нужно:
1. Сгенерировать массив из 100 последовательных чисел.
2. Брать первый элемент массива, генерить случайное число от 1 до 100, и менять местами первый элемент с элементом со случайно сгенерированным номером, и так далее.
И не нужно 2-х массивов. Не нужно изобретать свои алгоритмы генерации случайных чисел.

Старый 09.12.2008, 12:11
mult2002 вне форума Посмотреть профиль Отправить личное сообщение для mult2002 Найти все сообщения от mult2002
  № 9  
Ответить с цитированием
mult2002

Регистрация: Dec 2008
Сообщений: 2
Код:
temp = new Array();
for (i=1;i>100;i++) {
temp.push (i);
trace (temp[i]);
}
deck = new Array ();
while (temp.length > 0) {
r = int(Math.random()*temp.length);
deck.push(temp[r]);
temp.splice(r,1);
		}
trace (deck);


Последний раз редактировалось iNils; 09.12.2008 в 12:15.
Старый 09.12.2008, 12:16
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
mult2002, для кода нужно использовать теги форматирования кода.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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