Каталог решений - Как перебрать все варианты чего-либо

Как перебрать все варианты чего-либо

Как перебрать все варианты чего-либо

В наличии

Навеяно темой с Мисты:
Имеем ряд чисел от одного до девяти, надо расставить знаки плюсы и минусы, чтобы получилось в сумме 20
1(+/-)2(+/-)3(+/-)4(+/-)5(+/-)6(+/-)7(+/-)8(+/-)9 = 20 (20 не получиться, это просто пример!!!)

Вот как можно автоматизировать пример, что бы получить все варианты расчета?

Категория:

Описание

Я раньше занимался программированием на Ассемблере, так что для меня двоичная и шестнадцатиричная система счисления ближе десятичной.

1 = 1000, 2 = 0100, 3 = 1100, 4 = 0010 и т.д. из этого для примера возьмем 0 = Минус, 1 = Плюс

В выше указаном примере нам надо перебрать 8 различных подстановок +- (8 = 11111111B = 255D)

КоличествоВариантов = 8;
КоличествоВариантовРасчета = POW(2, КоличествоВариантов) — 1; //Расчитываем количество вариантов
Для ВариантРасчета = 0 По КоличествоВариантовРасчета Цикл       //Перебираем варианты
   
ЗначениеВариантаРасчета = ВариантРасчета;                              //Берем текущий вариант

    Пример = «»;                                                                                      //Текст примера
   
Для ПереборВарианта = 1 По КоличествоВариантов Цикл            //Перебираем расчет варианта
       
Вариант = ЗначениеВариантаРасчета%2;                                 // Получаем значение варианта

        //Здесь выполняем действие со значением варианта, в нашем примере знак «+» или «-«

        Знак = ?(Вариант = 1, «+», «-«);

        //Делаем текст примера

        Пример = Пример + ПереборВарианта  + Знак;

        //***

        ЗначениеВариантаРасчета = Цел(ЗначениеВариантаРасчета / 2); //Сдвигаем на следующее значение варианта
   
КонецЦикла;

    Пример = Пример + «9»;//т.к. последнее число не вошло в цикл просто добавим его.

    РасчетПримера = Вычислить(Пример);//Вычислим выражение

    Сообщить(Пример + » = » + РасчетПримера);

КонецЦикла;

 

По этому принципу расчета сделана моя обработка «Рюкзак».

has been added to your cart:
Оформление заказа