Упростить код перебора комбинаций - C (СИ)
Формулировка задачи:
Дан код перебора комбинаций 4 символов, его необходимо упростить, что бы была возможность перебора комбинаций из n-символов.
#include<stdio.h> #include<stdlib.h> #include <string.h> FILE * out = fopen("out.txt", "w"); int main() { int a[4], z = 0, y = 0, x = 0, w = 0, v = 0; for(z = 33; z <= 126; ++z) { a[0] = z; for(y = 33; y <= 126; ++y) { a[1] = y; for(x = 33; x <= 126; ++x) { a[2] = x; for(w = 33; w <= 126; ++w) { a[3] = w; printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]); fputc(a[0], out); fputc(a[1], out); fputc(a[2], out); fputc(a[3], out); fputc(10, out); } } } } return 0; }
Решение задачи: «Упростить код перебора комбинаций»
textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define len 2 #define min 48 //Минимальный код #define max 57 //Максимальный код int main() { char str[len + 1]; str[len] = '\0'; for (int i = 0; i < len; i++) str[i] = min; printf("%s\n", str); while (1) { int accum = 1; for (int i = len - 1; accum > 0; i--) { if (str[i] == max) { if (i != 0) str[i] = min; else str[i]++; } else { str[i]++; accum = 0; } } if (str[0] == max + 1) break; printf("%s\n", str); } system("pause"); return 0; }
Объяснение кода листинга программы
Вывод всех возможных комбинаций строки из min до max, где длина строки равна len.
- Объявить переменную типа char массив str с длиной len + 1 и инициализировать его последним символом '\0'.
- Заполнить строку str значением min.
- Вывести значение переменной str с помощью функции printf.
- Запустить бесконечный цикл while (1).
- Внутри цикла иметь переменную accum, которая инициализируется значением 1.
- Внутренний цикл for, который итерируется от len - 1 до 0 с шагом -1, пока accum больше 0.
- Если значение str[i] равно max, то уменьшить значение str[i] на 1, если i не равно 0.
- Если значение str[i] не равно max, то увеличить значение str[i] на 1 и установить accum равным 0.
- Если accum равно 0, то выйти из внутреннего цикла.
- Если значение str[0] равно max + 1, то выйти из внешнего цикла.
- Вывести значение переменной str с помощью функции printf.
- Использовать функцию system(
pause
) для приостановки программы до нажатия клавиши. - Вернуть 0 для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д