60 lines
1.4 KiB
C
Executable File
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;
|
|
} |