[贪心] 删数问题

题目描述

键盘输入一个高精度的正整数n(<=240位),去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。

输入

n ,s

输出

最后剩下的最小数


样例输入
178543
4
样例输出

13


这题贪心是要找一个单调增的数,即保证较小数总在高位上。

#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
const int Limit_Size = 250;
using namespace std;
char num[Limit_Size];
int n,len;
void print(){
    int k = 0;
    while (num[k]=='0') k++;
    if ( len <= 0 ||k >=len) cout << 0;
    else for (int i = k; i < len; i++ ) cout << num[i];
}

int main(){
    cin >> num >> n;
    len = strlen(num)-1;
    while(n--)
    {
        for (int j = 0; j < len;j++)
            if (num[j] > num[j+1] )
            {
                for (int k = j; k < len;k++) num[k] = num[k+1];
                break;
            }
        len--;
        //每次做完长度减一,当上面的work找不到前一个数比后一个数大,顺便也就把最后一位删了
    }
    print();
return 0;
}




posted @ 2016-04-30 18:58  Mr.doublerun  阅读(19)  评论(0)    收藏  举报