
09.11.2005, 16:09
|
|
Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
|
Если ячеек немного (в пределах разрядности) то быстрее всего использовать двоичные флаги.
Имеем:
//константы, есть степени двойки
cell1 = 1;
cell2 = 2;
cell3 = 4;
cell4 = 8;
cell5 = 16;
//строго говоря, max(cell)*2 - 1;
chksum = 1+2+4+8+16;
//начальное состояние рюкзака:
items = 0;
//Проверка наличия свободной (хотя бы одной) ячейки :
if (chksum ^ items != 0) {trace('есть места');}
//добавление вещи, чуть сложнее...
items += Math.pow(2, Math.floor(Math.log(chksum ^ mas) / Math.LN2));
//тут Math.pow(2, Math.floor(Math.log(chksum ^ mas) / Math.LN2)) - это "вес" итема, а Math.floor(Math.log(chksum ^ mas) / Math.LN2) - номер ячейки, в которую его поместили.
Величина chksum^mas = 0 при полном рюкзаке, поэтому теоретически логарифм должен дать ошибку, но выдает он минус бесконечность во флэше, поэтому pow(2, логарифм) выдает 0 при полностью заполненном рюкзаке.
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.
Последний раз редактировалось Skubent; 09.11.2005 в 16:14.
|