刪數問題--貪心算法+string類的一些應用

先上題目:

Description

你有一個長度爲n的數字串, 現在要求你刪除其中k個數字, 使得剩下的數字在不改變原有順序的情況下,組成的數字最大.

Input

每組數據包含一個數字串(1 <= n <= 1000),和一個整數k (0 <= k < n).

Output

對於每組數據, 輸出你的答案.

Sample Input

1452 2
33 0

Sample Output

52
33


思路是這樣的,每次從左開始比較,如果全是遞減的話,就刪除最後一位,如果出現非遞減的數,就刪除第一次出現遞增的那個數。

代碼:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    int n;
    string::size_type i;
    while(cin >> str >> n)
    {
        while(n)
        {
            for(i = 0; i != str.size() - 1 && str[i] >= str[i + 1]; i++);
            str.erase(i, 1);
            n--;
        }
        cout << str << endl;
    }

    return 0;
}

size_type其實是string模板類定義的一種類型之一,它與size_of的用法相似,只是它根據存儲的類型返回字符串的長度.對於 string具體化,將根據char返回字符串的長度,在這種情況下,size_type與size_of等效.size_of是一種無符號類型.

size_type是在string類內定義的一個無符號整形類型,由於string類裏很多方法的返回值都是size_type類型的,所以必須使用size_type進行類型聲明。

erase(pos, 1)意思從pos位置刪除第一個字符

發佈了42 篇原創文章 · 獲贊 15 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章