第七课选做题。
This commit is contained in:
60
07/Optional03.c
Executable file
60
07/Optional03.c
Executable file
@@ -0,0 +1,60 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user