保留最大的数

 

https://www.nowcoder.com/practice/7f26bfeccfa44a17b6b269621304dd4a?tpId=85&&tqId=29890&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking

 

给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。 
*/ 
/* 
解题思路:例如数字51643,需要删除3位数而使剩下的数字组合最大,此时需要从头开始两个数字比较大小, 
如果当前数字比其下一位小,则删除当前数字,此时变为5643,继续从头开始遍历,5比6小,则删除5,变为643 
继续从头遍历,当走到4的位置发现4比3大,而且4已经是倒数第二位数字,则删除最后一位数字,就得到了64 
关键点:1.每次j都需要从头遍历 
2.需要考虑最后两个数字比较时,如果倒数第二位比最后一位小,需要删除最后一个数字。 
*/

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include <cctype>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cmath>
 7 #include<string>
 8 #include<cmath>
 9 #include<set>
10 #include<vector>
11 #include<stack>
12 #include<queue>
13 #include<map>
14 using namespace std;
15 #define ll long long
16 #define mem(a,x) memset(a,x,sizeof(a))
17 #define se second
18 #define fi first
19 const int INF= 0x3f3f3f3f;
20 const int N=1e5+5;
21 
22 string s;
23 
24 int main()
25 {
26     int k;
27     cin>>s>>k;
28     int i;
29     while(k--)
30     {
31         int len=s.length();
32         for(i=0;i<len-1;i++)
33         {
34             if(s[i]<s[i+1]) {
35                 s.erase(s.begin()+i); //
36                 break;
37             }
38         }
39         if(i==len-1) 
40             s.erase(s.end()-1); //这种操作 
41         i=0;
42     }
43     
44     cout<<s;
45 }

 

posted @ 2018-07-21 09:57  木流牛马  阅读(130)  评论(0编辑  收藏  举报