思路:这题就是贪心策略,从第一个数字开始是每个删除的数字尽可能大,就可以得到尽可能小的数字。
#include<bits/stdc++.h>
using namespace std;
char s[300];
int k;
int main()
{
while(~scanf("%s%d",s,&k))
{
int len = strlen(s);
int i = 0;
while(k)
{
int j = 0;
for(j = i;j < len;j++)
{
if(s[j] <= s[j+1]) continue;
else break;
}
int l;
for(l = j;l < len;l++)
{
s[l] = s[l+1];
}
s[l] = '\0';
len--;
k--;
}
int ok = 1;//这里是判断全是零直接输出零
int f = 0;//判断前导是零的情况
for(int i = 0;i < len;i++)
{
if(s[i] != '0') f++;
//cout << f << endl;
if(s[i] == '0' && f == 0) continue;
printf("%c",s[i]);
ok = 0;
}
if(ok == 0)
{
printf("\n");
}
else
{
printf("0\n");
}
}
}