先上題目:
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位置刪除第一個字符