解题思路 :在可以删除的范围内(m+1)找到最大的数,删除它前面的,有两种情况:1、m为零了,n还没有遍历完,把剩余的全部放到临时数据里保存 2、数据已经遍历完了,m还不为零,就再从临时数组里面再删除m个数。
已AC代码:
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
char n[105], temp[105];
int m, mx=0, fx=0, i=0, f=0, j;
scanf("%s%d", n, &m);
while(m && mx<strlen(n))
{
for(i=mx; i<=fx+m&&i<strlen(n); i++)
{
if(n[i] > n[mx])
mx=i;
}
temp[f] = n[mx];
f++;
m -= mx-fx;
mx++;
fx = mx;
}
if(m)
{
j= f - m;
temp[j]='\0';
}
else
{
for(int j=fx; j<strlen(n); j++)
{
temp[f] = n[j];
f++;
}
temp[f] = '\0';
}
printf("%s\n", temp);
}
return 0;
}