Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Помогите написать алгоритм! (http://www.flasher.ru/forum/showthread.php?t=37517)

Denisator 23.09.2002 15:24

Помогите написать алгоритм!
 
Чёрт! никак не могу придумать алгоритм!
Есть N переменных (назовём эту группу переменных ААА) значение которых может быть 1 или 0. Из эитих переменных надо выбрать случайным образом одну, значение которой равно 1, затем поменять это значение на 0 и сообщить имя этой переменной переменной name.Если такая переменная найдена то переменной flag присваивается значение 1. Если значение всех переменных ААА равно 0, то ничего не происходит и переменной flag присваевается 0. У-ф-ф-ф!

Спасибо!

Aib 23.09.2002 15:57

Тебе этот алгоритм для чего нужен-то?
И, вообще говоря, тут вроде и писать нечего - просто в своём предложении замени все "если" на if else и т.д.

Dendroid 23.09.2002 16:04

То, что ты описал - это и есть алгоритм :)
Если слово в слово переложить это в AS, то получиться:
Код:

// возвращает индексы ненулевых значений массива aaa в случайном порядке
var aaa = new Array(1, 0, 1, 0, 0, 0, 1, 0, 0, 1);
var flag;
function selectN() {
        var k, n = random(aaa.length);
        for (var i = 0; i<aaa.length; i++) {
                k = (n+i)%aaa.length;
                if (aaa[k]) {
                        break;
                }
        }
        aaa[k] = 0;
        flag = i == aaa.length ? 0 : 1;
        return flag ? k : -1;
}
trace(selectN());
trace(selectN());
trace(selectN());
trace(selectN());
trace(selectN());

Конечно это еще можно оптимизировать (если надо).....

Denisator 23.09.2002 16:19

Цитата:

Тебе этот алгоритм для чего нужен-то?
Чтобы из N человечков выбрать одного незанятого, занять его и пустить на него тарелку :-).

Я специально задал вопрос абстрактно чтобы избежать таких формулеровок.

Цитата:

И, вообще говоря, тут вроде и писать нечего - просто в своём предложении замени все "если" на if else и т.д.
возникают трудности здесь:"Из эитих переменных надо выбрать случайным образом одну, значение которой равно 1"

Denisator 23.09.2002 16:40

Цитата:

Тебе этот алгоритм для чего нужен-то?
Чтобы из N человечков выбрать одного незанятого, занять его и пустить на него тарелку :-).

Хм... а как понимать эту строчку?
flag = i == aaa.length ? 0 : 1;

Dendroid 23.09.2002 17:28

Это тернальная операция :)
Только сегодня на лекции студентам рассказывал :)
Это значит: если i равно размеру массива (т.е. единиц не найдено), то переменной flag присвоить 0, иначе присвоить 1...
Ты ж сам просил...

Nox Noctis 23.09.2002 17:36

Цитата:

Оригинал написал(а) Dendroid
тернальная операция
кххх... нет чтобы выражаться по-человечески !... :)

шучу :)
на английском самое правильное название для этой фигни...
безо всяких там жутких слов:
" one-line if " и все

вообще - этьо сильно похоже на маааленькую модель СМО :)
только еще систему отказов\ожидания обработки заявок
сделать и будет оно самое

а самое правильное (но совсем не самое простое ;) ) -
сделать побитовый алгоритм :)
тогда будет уже не массив, а всего одна переменная-число
компактнее и удобнее...
имхо :)

Nox Noctis 23.09.2002 17:45

кстати о: flag = i == aaa.length ? 0 : 1;

зачем ? :)

то же самое: flag = i != aaa.length;

Dendroid 23.09.2002 17:53

конечно можно, но так еще менее понятно :)

Denisator 23.09.2002 21:05

Издеваетесь :( :( :(


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

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