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

算法经典题型12

键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。输入数据均不需判错。输出应包括所去掉的数字的位置和组成的新的正整数(N不超过240位)。

用到的思想—贪心法
博主用到的环境:Win7, CodeBlocks等。

一、代码

#include
using namespace std;
int main() {
    int k;
    string s;
    while (cin >> s >> k) {
        if (k > s.size()) {
            cout << "Invalid Input.";
            continue;
        }
        while (k) {
            int i;
            for (i = 0; i < s.size() - 1 && s[i] <= s[i + 1]; i++);
            s.erase(i, 1);
            k--;

        }
        if (s.empty()) {
            cout << 0 << endl;
            continue;
        }

        int i = 0;
        for (i = 0; i < s.size()-1;) {
            if (s[i] == '0') i++;
            else break;
        }
        cout << s.substr(i) << endl;
    }
}

二、测试

键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。(C++)(贪心法)_第1张图片

总结

谢谢宝宝们的阅读,有问题的话评论@我,没问题的话点个赞再走哦~
在这里插入图片描述

你可能感兴趣的:(算法经典例题,c++,算法,后端,编程语言)