Другие языки программирования и технологии

Помогите найти все возможные вариации положительных и отрицательных чисел в массиве.

Есть массив из 12 элементов (для удобства считаем что все положительные) . Нужно найти все вариации этого массива, когда числа меняют знаки. К примеру:
1)+,+,+++,+++,+++,+
2)-,+,+++,+++,+++,+
3)-,-,+++,+++,+++,+
4)-,-,-++,+++,+++,+
и т. д. пока не получатся все варианты.
Тупо цикл от 0 до 2^12, если взятый бит счетчика 0, то -, иначе +:

#include <iostream>

int main() {
    for (int v = 0; v < 1 << 12; ++v) {
        for (int c = 1; c < 1 << 12; c <<= 1) std::cout << (v & c ? "+ " : "- ");
        std::cout << std::endl;
    }
}

Напечатает:
- - - - - - - - - - - - 
+ - - - - - - - - - - - 
- + - - - - - - - - - - 
+ + - - - - - - - - - - 
- - + - - - - - - - - - 
+ - + - - - - - - - - - 
- + + - - - - - - - - - 
+ + + - - - - - - - - - 
- - - + - - - - - - - - 
+ - - + - - - - - - - - 
- + - + - - - - - - - - 
+ + - + - - - - - - - - 
- - + + - - - - - - - - 
+ - + + - - - - - - - - 
- + + + - - - - - - - - 
+ + + + - - - - - - - - 
- - - - + - - - - - - - 
+ - - - + - - - - - - - 
- + - - + - - - - - - - 
+ + - - + - - - - - - - 
- - + - + - - - - - - - 
+ - + - + - - - - - - - 
- + + - + - - - - - - - 
+ + + - + - - - - - - - 
- - - + + - - - - - - - 
+ - - + + - - - - - - - 
- + - + + - - - - - - - 
...
+ + - - + + + + + + + + 
- - + - + + + + + + + + 
+ - + - + + + + + + + + 
- + + - + + + + + + + + 
+ + + - + + + + + + + + 
- - - + + + + + + + + + 
+ - - + + + + + + + + + 
- + - + + + + + + + + + 
+ + - + + + + + + + + + 
- - + + + + + + + + + + 
+ - + + + + + + + + + + 
- + + + + + + + + + + + 
+ + + + + + + + + + + + 
Евгений Вяткин
Евгений Вяткин
86 549
Лучший ответ
вижу кривой, но довольно простой вариант.
можно как бы через двоичные числа сделать
создадим массив B = 0 0 0 0 0 0 0 0 0 0 0 0 (12 нулей)
потом пока он не станет равен 1 1 1 1 1 1 1 1 1 1 1 1
потом циклом проходим по вашему первому массиву, те числа элемент i котрых совпадет с элементом i = 0 выведем как положительные, если B == 1, то отрицательными.
В конце прохода цикла прибавляем единицу к нашему "двоичному числу" помещенному в массив. Это можно в отдельную функцию вынести вообще.
Майрамбек Бактыбеков вижу кривой, но довольно простой вариант.
можно как бы через двоичные числа сделать
создадим массив B = 0 0 0 0 0 0 0 0 0 0 0 0 (12 нулей)
потом пока он не станет равен 1 1 1 1 1 1 1 1 1 1 1 1
потом циклом проходим по вашему первому массиву, те числа элемент i котрых совпадет с элементом i = 0 выведем как положительные, если B == 1, то отрицательными.
В конце прохода цикла прибавляем единицу к нашему "двоичному числу" помещенному в массив. Это можно в отдельную функцию вынести вообще.

Похожие вопросы