#include #include 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; }