![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Добрый день.
Я тут запутался. Хочу чтобы добрые люди показали выход. Требуется в массив из ста элементоа загнать числа от одного до ста, но чтобы они не повторялись среди элементов массива. Знаю задача простая, но в ней погряз. Вроде бы принцып прост. Сгенерил число. Побежал по элементам если встретил, генеришь снова, если нет следующий. Но выстроить в грамотный код немогу.
__________________
Встретимся на пляже! |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
1. Сгенерировать временный массив Temp чисел 1-100
2. В цикле брать случайное число R в пределах длины Temp. 3. Взять элемент с индексом R из Temp, поместить значение элемента в массив случайных чисел Rand и удалить элемент R из Temp (длинна массива изменится). И так до конца цикла. |
|
|||||
|
Спасибо!
__________________
Встретимся на пляже! |
|
|||||
|
Регистрация: May 2006
Сообщений: 36
|
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; } |
|
|||||
|
вот вам вариант без массива(генерация псевдослучайной последовательности):
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 : |
|
|||||
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);
__________________
: M F N W : |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 6
|
Обычный вопрос на собеседовании, который решается и реализуется минуты за 3.
Алгоритм тут простой, нужно: 1. Сгенерировать массив из 100 последовательных чисел. 2. Брать первый элемент массива, генерить случайное число от 1 до 100, и менять местами первый элемент с элементом со случайно сгенерированным номером, и так далее. И не нужно 2-х массивов. Не нужно изобретать свои алгоритмы генерации случайных чисел. |
|
|||||
|
Регистрация: Dec 2008
Сообщений: 2
|
Последний раз редактировалось iNils; 09.12.2008 в 12:15. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|