Nearest Beautiful Number (easy version)

2021/8/21 14:57:55 浏览：

题目

Nearest Beautiful Number (easy version)

问题描述

x x 仅由 k k 种数字所组成，输出满足 x ≥ n x\geq n 中最接近 n n x x

分析

思路二（循环模拟）

for(char a = '0'; a <= '8'; a++)
for (char b = a + 1; b <= '9'; b++)
{
//......
}


代码

#include <bits/stdc++.h>

using namespace std;

string solve1(string n)
{
string res(n.length(), '9');
for (char c = '8'; c >= '0'; c--)
{
string t(n.length(), c);
if (t >= n)
res = t;
}

return res;
}

string solve2(string n)
{
string res(n.length(), '9');

for(char a = '0'; a <= '8'; a++)
for (char b = a + 1; b <= '9'; b++)
{
bool n_ok = true;
for (int i = 0; i < n.length(); i++)
{
if (n[i] < b)
{
string t = n;
if (t[i] < a) t[i] = a;
else t[i] = b;
for (int j = i + 1; j < n.length(); j++)
t[j] = a;
if (res > t)
res = t;
}

if(n[i] != a && n[i] != b)
{
n_ok = false;
break;
}
}

if (n_ok) return n;
}

return res;
}

string solve()
{
string n;
int k;
cin >> n >> k;

if (k == 1) return solve1(n);
else return solve2(n);
}

int main()
{
int t;
cin >> t;

while (t--)
cout << solve() << '\n';

return 0;
}