1. 程式人生 > >2017校招-保留最大數

2017校招-保留最大數

題目描述
給定一個十進位制的正整數number,選擇從裡面去掉一部分數字,希望保留下來的數字組成的正整數最大。
輸入描述:
輸入為兩行內容,第一行是正整數number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的數字數量cnt 1 ≤ cnt < length(number)。
輸出描述:
輸出保留下來的結果。
示例1

輸入
325 1
輸出
35


#include<iostream>
#include<string>
using namespace std;
/*思路:例如數字51643,需要刪除3位數而使剩下的數字組合最大,
此時需要從頭開始兩個數字比較大小, 如果當前數字比其下一位小,
則刪除當前數字,此時變為5643,繼續從頭開始遍歷,5比6小,則刪
除5,變為643繼續從頭遍歷,當走到4的位置發現4比3大,而且4已
經是倒數第二位數字,則刪除最後一位數字,就得到了64*/
int main() { string number; int count; int j; while (cin >> number) { cin >> count; for (int i = 0; i<count; i++) { int length = number.length(); for (j = 0; j<length - 1; j++) { if (number[j]<number[j + 1
]) { number.erase(number.begin() + j); break; } } if (j == length - 1) //例如51643,當j到數字倒數第二位時,4比3大,此時要刪除3, number.erase(number.end() - 1); j--; //每次都需要j--使j從數字的開始遍歷。 } cout
<< number; } return 0; }