思路:
枚举出所有数字,再for一遍
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
vector<int>num;
int a[20][20] = {
{0,-1},
{0,1,2,3,4,5,6,7,8,9,-1},
{2,3,5,6,8,9,0,-1},
{3,6,9,-1},
{4,5,6,7,8,9,0,-1},
{5,6,8,9,0,-1},
{6,9,-1},
{7,8,9,0,-1},
{8,9,0,-1},
{9,-1}
};
void init() {
for(int i = 1;i <= 9;i++) {
num.push_back(i);
for(int j = 0;j <= 10;j++) {
if(a[i][j] == -1) break;
num.push_back(i * 10 + a[i][j]);
for(int k = 0;k <= 10;k++) {
int tmp = a[i][j];
if(a[tmp][k] == -1) break;
num.push_back(i * 100 + a[i][j] * 10 + a[tmp][k]);
}
}
}
}
int main() {
init();
int T;scanf("%d",&T);
while(T--) {
int n;scanf("%d",&n);
int ansx = 0,ans = 1e9;
for(int i = 0;i < num.size();i++) {
if(abs(num[i] - n) < ans) {
ans = abs(num[i] - n);
ansx = num[i];
}
}
printf("%d\n",ansx);
}
return 0;
}