Files
BasicsOfComputerSoftwareEng…/07/Optional03.c
2022-11-02 19:44:17 +08:00

60 lines
1.4 KiB
C
Executable File

#include <stdio.h>
#include <stdbool.h>
bool digits[10] = { 0 };
bool checkDigit(int origin, int toBeChecked) {
bool originDigit[10] = { 0 }, toBeCheckedDigit[10] = { 0 };
int i = 0;
while (toBeChecked > 0) {
if (toBeCheckedDigit[toBeChecked % 10] == true) {
return false;
}
else {
toBeCheckedDigit[toBeChecked % 10] = true;
}
toBeChecked /= 10;
}
while (origin > 0) {
originDigit[origin % 10] = true;
origin /= 10;
}
while (i < 10) {
if (originDigit[i] != toBeCheckedDigit[i]) {
return false;
}
i++;
}
return true;
}
void pickDigit(int layer, int picked) {
int i = 0;
if (layer == 7) {
// printf("%d\n", picked);
if (checkDigit(picked, 2 * picked) && checkDigit(picked, 3 * picked)) {
printf("%d\n", picked);
}
}
else if (layer == 1) {
for (i = 1; i <= 3; i++) {
digits[i] = true;
pickDigit(2, i);
digits[i] = false;
}
}
else {
for (i = 0; i <= 9; i++) {
if (digits[i] == false) {
digits[i] = true;
pickDigit(layer + 1, picked * 10 + i);
digits[i] = false;
}
}
}
}
int main() {
pickDigit(1, 0);
return 0;
}