Я раньше занимался программированием на Ассемблере, так что для меня двоичная и шестнадцатиричная система счисления ближе десятичной.
1 = 1000, 2 = 0100, 3 = 1100, 4 = 0010 и т.д. из этого для примера возьмем 0 = Минус, 1 = Плюс
В выше указаном примере нам надо перебрать 8 различных подстановок +- (8 = 11111111B = 255D)
КоличествоВариантов = 8;
КоличествоВариантовРасчета = POW(2, КоличествоВариантов) - 1; //Расчитываем количество вариантов
Для ВариантРасчета = 0 По КоличествоВариантовРасчета Цикл //Перебираем варианты
ЗначениеВариантаРасчета = ВариантРасчета; //Берем текущий вариант
Пример = ""; //Текст примера
Для ПереборВарианта = 1 По КоличествоВариантов Цикл //Перебираем расчет варианта
Вариант = ЗначениеВариантаРасчета%2; // Получаем значение варианта
//Здесь выполняем действие со значением варианта, в нашем примере знак "+" или "-"
Знак = ?(Вариант = 1, "+", "-");
//Делаем текст примера
Пример = Пример + ПереборВарианта + Знак;
//***
ЗначениеВариантаРасчета = Цел(ЗначениеВариантаРасчета / 2); //Сдвигаем на следующее значение варианта
КонецЦикла;
Пример = Пример + "9";//т.к. последнее число не вошло в цикл просто добавим его.
РасчетПримера = Вычислить(Пример);//Вычислим выражение
Сообщить(Пример + " = " + РасчетПримера);
КонецЦикла;
По этому принципу расчета сделана моя обработка "Рюкзак".