Перебор всех чисел определенной длины и системы счисления - C (СИ)
Формулировка задачи:
Суть задачи: Пользователь вводит длину числа( не больше 10) и Систему счисления( не больше 16) , наша программа должна вывести количество "Выиграшных билетов", билет выиграшный, если сумма цифр в парных и не парных позициях совпадает. Нет проблемы как посчитать суммы, но я не могу сделать перебор варианта каждой длины в каждой системе счисления =/
Решение задачи: «Перебор всех чисел определенной длины и системы счисления»
textual
Листинг программы
char a[10];
int L; // Длина
int N; // Система счисления.
for(i=0; i<L; i++) a[i] = 0;
while(1) {
if (a[L-1] < N-1) a[L-1]++;
else {
for(i=L-2; i>=0; i--) {
if (a[i] == N-1) continue;
a[i] ++;
for(j=i+1; j<L; j++) a[j] = 0;
break;
}
if (i < 0) break;
}
// Анализ очередного числа
}
Объяснение кода листинга программы
- Объявлены две переменные:
aтипаcharс длиной 10 иLтипаintс значением 10, которая обозначает длину массиваa. - Объявлена переменная
Nтипаint, которая обозначает систему счисления. - Инициализирован массив
aнулями. - Запущен бесконечный цикл while(1).
- В каждой итерации цикла проверяется последний элемент массива
a. Если он меньшеN-1, то увеличивается на 1. - Если это условие не выполняется, то начинается цикл for, который проверяет все элементы массива
aс конца. Если элемент равенN-1, то цикл продолжает работу со следующего элемента. Если элемент не равенN-1, то он увеличивается на 1, а все последующие элементы обнуляются. - Если в цикле for не было найдено подходящего элемента, то цикл прерывается и начинается новая итерация внешнего цикла while.
- Если длина массива
aравна 0, то цикл прерывается. - После каждой итерации внешнего цикла while происходит анализ очередного числа.