/* // 45678.cpp // // A test program to return 2 numbers // such that their difference is 45,678 // with unique digits 0 - 9 */ #include <iostream> using namespace std; const int N_MAX = 98765; const int N_MIN = 45678 + 1234; bool IsAnswer(int n); // Pre: N_MIN <= n <= N_MAX // Post: return true if n and // n - 45678 contain unique digits // 0,1,2,3,4,5,6,7,8,9 int main() { for (int i=N_MIN; i <=N_MAX; i++) if (IsAnswer(i)) cout << i << " " << i - 45678 << endl; return 0; } bool IsAnswer(int n) // Pre: N_MIN <= n <= N_MAX // Post: return true if n and // n - 45678 contain unique digits // 0,1,2,3,4,5,6,7,8,9 { int s = n - 45678; int nDigit1 = n / 10000; int sDigit1 = s / 10000; if (nDigit1 == sDigit1) return false; int nDigit2 = n % 10000 / 1000; int sDigit2 = s % 10000 / 1000; if (nDigit2 == sDigit2 || nDigit2 == nDigit1 || sDigit2 == sDigit1 || nDigit2 == sDigit1 || sDigit2 == nDigit1) return false; int nDigit3 = n % 1000 / 100; int sDigit3 = s % 1000 / 100; if (nDigit3 == sDigit3 || nDigit3 == nDigit2 || sDigit3 == sDigit2 || nDigit3 == nDigit1 || sDigit3 == sDigit1 || nDigit3 == sDigit2 || sDigit3 == nDigit2 || nDigit3 == sDigit1 || sDigit3 == nDigit1) return false; int nDigit4 = n % 100 / 10; int sDigit4 = s % 100 / 10; if (nDigit4 == sDigit4 || nDigit4 == nDigit3 || sDigit4 == sDigit3 || nDigit4 == nDigit2 || sDigit4 == sDigit2 || nDigit4 == nDigit1 || sDigit4 == sDigit1 || nDigit4 == sDigit3 || sDigit4 == nDigit3 || nDigit4 == sDigit2 || sDigit4 == nDigit2 || nDigit4 == sDigit1 || sDigit4 == nDigit1) return false; int nDigit5 = n % 10; int sDigit5 = s % 10; if (nDigit5 == sDigit5 || nDigit5 == nDigit4 || sDigit5 == sDigit4 || nDigit5 == nDigit3 || sDigit5 == sDigit3 || nDigit5 == nDigit2 || sDigit5 == sDigit2 || nDigit5 == nDigit1 || sDigit5 == sDigit1 || nDigit5 == sDigit4 || sDigit5 == nDigit4 || nDigit5 == sDigit3 || sDigit5 == nDigit3 || nDigit5 == sDigit2 || sDigit5 == nDigit2 || nDigit5 == sDigit1 || sDigit5 == nDigit1) return false; return true; }