Delete Numbers

Delete Numbers

 

Time Limit:   1000MS       Memory Limit:   65535KB
Submissions:   156       Accepted:   21

 

Description
给定n 位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。 对于给定的正整数a,编程计算删去k个数字后得到的最小数。
Input
第1 行是1 个正整数a。第2 行是正整数k。
Output
计算出的最小数(输出无前导0)

Sample Input

178543
4

Sample Output

13


【分析】

如果是12000000123,要删除3位的话

应该删除前面的12和最后的3,输出12;

而不是删除2、2、3,输出10000001,错的;

这样看来就得用贪心了

从高位(即i=0)开始,

删除左边比右边大的数

 

# include<iostream>
# include<cstring>
using namespace std;
char str[10000];
int main()
{
    int k,len,i,j,c;
    cin>>str;
    cin>>k;
    len=strlen(str);
    for(i=0;i<k;i++)
    {
        for(j=0;j<len-1;j++)
        {
            if(str[j]>str[j+1])
            {
            for(c=j;c<len-1;c++)//覆盖原来的数
            str[c]=str[c+1];
            break;
            }
            
        }
        len--;//这样即使升序也减了末尾数
    }
    int flag=0;
    for(i=0,c=0;i<len;i++)
    {
        if(flag==0&&str[i]!='0')
        {
            cout<<str[i];
            flag=1;

        }
        else if(flag)
            cout<<str[i];
    }
    if(!flag)cout<<"0";//为0的情况
    cout<<endl;
    return 0;
}   

 

 

 

 

posted on 2012-05-24 15:20  即为将军  阅读(315)  评论(0)    收藏  举报

导航