先上题目:
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位置删除第一个字符