I am getting wrong answer for my code. I cant figure out what i am doing wrong.
Link to the problem:- http://www.codeplanted.com/practice/6
My code:-
#include
#include
using namespace std;
bool CheckNumber(int* arr, int total, int num) {
int temp = num;
while (temp != 0) {
for (int i = 0; i < total; i++) {
if ((temp % 10) == arr[i]) {
return false;
}
}
temp /= 10;
}
return true;
}
int main() {
int cases;
cin >> cases;
while (cases > 0) {
int total;
cin >> total;
int* arr = new int[total];
for (int i = 0; i < total; i++) {
cin >> arr[i];
}
int target;
cin >> target;
int temp = target;
int count = 0;
while (temp != 0) {
temp /= 10;
count++;
}
temp = target;
bool flag = true;
while (temp != 0) {
for (int i = 0; i < total; i++) {
if ((temp % 10) == arr[i]) {
flag = false;
break;
}
}
temp /= 10;
}
if (flag == true) {
cout << 0 << endl;
}
else {
int upper = -1, lower = -1;
for (int i = target + 1; i <= 999; i++) {
if (CheckNumber(arr, total, i)) {
upper = i;
break;
}
}
for (int i = target - 1; i >= 0; i--) {
if (CheckNumber(arr, total, i)) {
lower = i;
break;
}
}
if (upper == -1) {
cout << abs(target - lower) << endl;
}
else if (lower == -1) {
cout << abs(target - upper) << endl;
}
else {
int min;
int l1 = abs(target - lower);
int l2 = abs(target - upper);
if (l1 < l2) {
min = l1;
}
else {
min = l2;
}
cout << min << endl;
}
}
cases--;
}
return 0;
}