2017校招-保留最大數
阿新 • • 發佈:2019-02-08
題目描述
給定一個十進位制的正整數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;
}