|
Как известно, количество подстановок на множестве X, имеющем мощнось n=|X|, равно n!. Для 7-сегментного индикатора имеем мощность множества сегментов, равную 7-ми, значит для перебора всех возможных перестановок необходимо всего лишь не более 5040 циклов - не так и много, можно решить задачу перебором.
Для начала сформируем множество сегментов из масива из 7-ми элементов X, содержащим числа 1..7 в порядке возрастания. Далее находим все перестановки, пользуясь например следующим алгоритмом (на С-образном языке, возвращает перестановки в антилексикографическом порядке):
void Process(int m) {
if (m==0) {
Validate(X);
} else {
for (i=0; i<m; i++) {
Process(m-1);
if (ij=0; k=m-1;
while (j<k) Swap(&X[j++],&X[k--]);
}
}
}Осталось написать функцию Validate, которая проверит, подходит ли данная перестановка заданным условиям (а это не сложно, проверив по маске подключенных сегментов соответствие выходов заданному для любых трех цифр входного кода). И выдать всех их, подходящих, на гора. Функция Swap меняет местами два элемента массива.
E-mail: info@telesys.ru