洛谷 1106 删数问题

题目

一个正整数N,去掉其中任意k个数字后剩下的数字按原次序组成新的正整数,使得剩下的数字组成的新数最小。


分析

按照一般的思想是快排,可是并不是这样,而是删掉递减序列,如果没有产生就是最后k个被删掉(注意前导0)。


代码

#include <cstdio>
#include <cstring>
using namespace std;
char s[251]; int n,len; bool flag;
int main(){
    scanf("%s",s); len=strlen(s); scanf("\n%d",&n);
    for (int i=1;i<=n;i++){
    for (int j=0;j<len-1;j++)
    if (s[j]>s[j+1]){
    for (int k=j;k<len-1;k++) s[k]=s[k+1]; break;}
    len--;
    }
    int cnt=0;
    for (int i=0;i<len;i++){
    if (s[i]!='0') flag=1;
    if (flag) putchar(s[i]),cnt++; 
    }
    if (!cnt) putchar('0');
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sugar_free_mint/article/details/80291655