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