刪除部分數字問題

//搜狐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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章