蓝桥杯官网全过但洛谷一个都没过,想知道哪些数据没有考虑到
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
long long num[20] = { 0 };
long long n, a, b;
long long ans[20] = { 0 };
int size;
long long* maxstr(long long str1[], long long str2[])
{
long long num1 = 0, num2 = 0;
for (int i = size; i > 0; i--)
{
num1 = num1 * 10 + str1[i];
num2 = num2 * 10 + str2[i];
}
if (num1 > num2) return str1;
else return str2;
}
int tran(long long n)
{
int i = 0;
while (n)
{
num[++i] = n % 10;
n /= 10;
}
return i;
}
void dfs(int pos, long long a, long long b)
{
if (pos == 0 || (a == 0 && b == 0))
{
long long* max_ans = maxstr(ans, num);
for (int i = 1; i < 20; i++)
{
ans[i] = max_ans[i];
}
return;
}
int x = num[pos];
if (9 - x <= a)
{
num[pos] = 9;
dfs(pos - 1, a - 9 + x, b);
num[pos] = x;
}
else if (a)
{
num[pos] += a;
dfs(pos - 1, 0, b);
num[pos] = x;
}
if (x < b)
{
num[pos] = 9;
dfs(pos - 1, a, b - x - 1);
num[pos] = x;
}
else
dfs(pos - 1, a, b);
}
int main(void)
{
scanf("%lld%lld%lld", &n, &a, &b);
size = tran(n);
dfs(size, a, b);
long long cnt = 0;
for (int i = 20; i >= 1; i--)
{
cnt = cnt * 10 + ans[i];
}
printf("%lld", cnt);
}