貪心算法-刪數問題解決

1、問題描述
給定n位正整數a,去掉其中任意k<=n個數字後,剩下的數字按原次序排列組成一個新的正整數。對於給定的n位正整數a和正整數k,設計一個算法找出剩下數字組成的新數最小的刪數方案。
輸入
第1行是1個正整數a,第2行是正整數k
輸出
對於給定的正整數a,編程計算刪去k個數字後得到的最小數。
樣例
在這裏插入圖片描述
2、思路
最近下降點優先的貪心策略
在這裏插入圖片描述
在這裏插入圖片描述
3、代碼實現

#include<iostream>
using namespace std;
int main(){
    string a;///n位數a
    int k;
    cin>>a>>k;
    ///如果k≥n,數字被刪完了
    if(k >= a.size())
        a.erase();
    else while(k > 0)
    {
        ///尋找最近下降點
        int i;
        for(i=0;(i<a.size()-1) && (a[i] <= a[i+1]);++i);
        a.erase(i, 1);///刪除xi
        k--;
    }
    ///刪除前導數字0
    while(a.size() > 1 && a[0] == '0')
        a.erase(0, 1);
    cout<<a<<endl;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章