欢迎来到PJCK的博客

(贪心)nyoj448-寻找最大数

题目描述:

请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,

比如当n=92081346718538,m=10时,则新的最大数是9888

 

输入描述:

第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)

输出描述:

每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数

样例输入:

2
92081346718538 10
1008908 5

样例输出:

9888
98
---------------------------------------------------------------------------------------------------
emmmm,太弱了,一个简单的贪心题要思考很久。。。。要多练习,多学习。
这个题是贪心的。比如,在第一个样例中,要拿出10个数,最后剩下四个数,要找出最大的四个数,于是,可以再尾部留下3个数,之前找出最大的一个数,标记其位置。然后继续在尾部留下2个数,从这个以标记的位置加一开始查找最大的数,这个继续下去直到找出最大的四位数为止。
emmm,这个要扎实代码基础,要熟练掌握标记的方法。
C++代码:
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int main() {
    char s[110];
    int T;
    cin >> T;
    while (T--) {
        int n;
        memset(s, 0, sizeof(s));
        cin >> s >> n;
        int end = n;
        int len = strlen(s);
        int i = 0;
        int t;
        int flag = 0;
        while (end < len) {
            for (i = flag, t = s[i]; i <= end; i++) {
                if (s[i] > t) {
                    flag = i;
                    t = s[i];
                }
            }
            end++;
            flag++;
            printf("%c", t);
        }
        cout << endl;
    }
    //system("pause");
    return 0;
}

 

 

posted @ 2019-04-10 09:29  PJCK  阅读(220)  评论(0编辑  收藏  举报