Просмотр полной версии : Помогите написать алгоритм!
Denisator
23.09.2002, 15:24
Чёрт! никак не могу придумать алгоритм!
Есть N переменных (назовём эту группу переменных ААА) значение которых может быть 1 или 0. Из эитих переменных надо выбрать случайным образом одну, значение которой равно 1, затем поменять это значение на 0 и сообщить имя этой переменной переменной name.Если такая переменная найдена то переменной flag присваивается значение 1. Если значение всех переменных ААА равно 0, то ничего не происходит и переменной flag присваевается 0. У-ф-ф-ф!
Спасибо!
Тебе этот алгоритм для чего нужен-то?
И, вообще говоря, тут вроде и писать нечего - просто в своём предложении замени все "если" на 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
Издеваетесь :( :( :(
Denisator
23.09.2002, 23:28
Большое спасибо Дендроиду, я решил свою задачу не используя этот сложный код, но и не без помощи его. Благодаря этому коду я познал дао кманды break, что и спасло меня. Также я узнал о полезной команде импликации и об тернальной операции.:)
Нокс Ноктису тоже спасибо, но за ответы на мои вопросы в дугих топиках.:)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.