内存:128  时间:1

题目描述

万恶的小黑,布置了一道题给老大做:给你一个n位的数,现在要求 你随意删除m位后,任意改变顺序,输出其能够构成的最小有效整数(即不能有前导零,如果只含有0则输出0)。但是,这正赶上了老大的对象从故乡来看他,老 大怎么能丢失这种机会呢。所以他找你寻求帮助,帮他完成这个问题吧。

输入

输入包含T组数据。每组数据包含两行,第一行包含两个整数n和m,代表一个数的位数和要删除的位数个数;第二行为一个n位的整数;(0<=m<n<5000)

输出

每组数据输出一行,表示删除后能够构成的最小整数

样例输入

2
5 2
54321
5 4
42130

样例输出

123
0

提示

代码如下

#include <iostream>  
#include <string>  
#include <algorithm>  
using namespace std;  
  
int main()  
{  
    int T,n,m,t;  
    char a[5000];  
    cin>>T;  
    for(int i=1;i<=T;i++)  
    {  
        cin>>n>>m;  
        cin>>a;  
        sort(a,a+n);            //对字符数组进行排序  
        t=0;                    //初始化t 用来判断舍弃之后数组是否全为0  
        a[n-m]='\0';            //从大数舍弃 将最后一位表为/0  
        for(int j=0;j<n-m;j++)  //循环输出第一位不为零的数  
        {  
            if(a[j]!='0')  
            {  
                cout<<a[j];  
                a[j]='a';       //将已输出的数标记为字符a 以便判断不再输出  
                break;  
            }  
            if(a[j]=='0') t++;  
        }  
        if(t!=n-m)  
        {for(int j=0;a[j]!='\0';j++)//循环输出结果  
            if(a[j]!='a') cout<<a[j];}  
        else cout<<"0";  
        cout<<endl;  
    }  
    return 0;  
}  

代码来源于互联网,仅供参考!