1106 删数
这不就是一个贪心啊
贪心不难理解,只是很难证明
给定一个数字,对于任意位的数,删除k个数,当然这k个数是不确定的,需要我们用自己计算
我们只需要计算最后的最小数
贪心,贪心,我的思路就是从第一个数开始判断
就是一个简单的覆盖,如果找到了数i大于下一个数i+1那么就需要将这个数进行一个覆盖,一共覆盖k次
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
char n[260];
int len,i,j,k;
int main()
{
cin>>n>>k;
len=strlen(n);
while(k--)//删除的数量
{
for(i=0;i<=len-2;i++)
if(n[i]>n[i+1])//当前这个大于后一个直接替换,类似于排序
//留着肯定不是最小的
{//删去山峰
for(j=i;j<=len-2;j++)
n[j]=n[j+1];//直接覆盖,充当删除
break;
}
len--;//删除了,需要减去了
}
i=0;
while(i<=len-1&&n[i]=='0')i++;//去除前导零
if(i==len)
printf("0");//全部都是零
else
for(j=i;j<=len-1;j++)
printf("%c",n[j]);//输出答案
return 0;
}