Перебор всех чисел определенной длины и системы счисления - 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 происходит анализ очередного числа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д