//搜狐2017筆試題
/*
筆試題:給定一個十進制的正整數number,選擇從裏面去掉一部分數字,希望保留下來的數字組成的正整數最大。
*/
/*
解題思路:例如數字51643,需要刪除3位數而使剩下的數字組合最大,此時需要從頭開始兩個數字比較大小,
如果當前數字比其下一位小,則刪除當前數字,此時變爲5643,繼續從頭開始遍歷,5比6小,則刪除5,變爲643
繼續從頭遍歷,當走到4的位置發現4比3大,而且4已經是倒數第二位數字,則刪除最後一位數字,就得到了64
關鍵點:1.每次j都需要從頭遍歷
2.需要考慮最後兩個數字比較時,如果倒數第二位比最後一位小,需要刪除最後一個數字。
*/
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
string number;
int count;
int j;
cout<<"請輸入一個十進制的正整數:";
while(cin>>number)
{
cout<<"請輸入要去掉的數字個數:";
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;
}