求最大递增数
同学发过来个文件,让我帮他做几个题目的,就做了下,贴在这里
题目:
描述:
输入一串数字,找到其中包含的最大递增数。递增数是指相邻的数位从小到大排列的数字。如: 2895345323,递增数有:289,345,23, 那么最大的递减数为345。
输入:
输入一串数字,默认这串数字是正确的,即里面不含有字符/空格等情况
输出:
输出最大递增数
样例输入:
123526897215
样例输出:
2689
1: #include<iostream>
2: #include<stdlib.h>
3: #include<cmath>
4: #include<vector>
5: #include<map>
6: #include <string>
7: using namespace std;
8: int main()
9: {
10: map<char,int> m;
11: for(int i=0;i<10;i++) //字符映射数字
12: {
13:
14: m['0'+i] = i;
15: }
16:
17: string num; //存放输入字符串
18: cin>>num;
19: int length = num.length();
20: if(length==1)
21: {
22: cout<<num<<endl; //输入只有1个数时,直接输出。
23: return 0;
24: }
25:
26: int max = 0; //用于存放目前最大递增数
27: string current = "";
28: current = current + num[0];//current
29: int temp = 0; //用于标记当前递增数是否扫描结束,1表示结束
30: for(int j =1;j<length;j++)
31: {
32: int sum = 0;
33:
34: if(m[num[j]]>m[num[j-1]])
35: current = current + num[j];
36: else
37: temp=1;
38:
39: if(temp == 1 || j == length-1) //只有当前递增数扫描结束或到尾部才开始计算当前递增数的值
40: {
41: int current_length = current.length();
42: for(int k=0;k<current_length;k++)
43: {
44: sum += m[current[k]]*pow(10,current_length-k-1); //存入目前的递增数
45: }
46: //cout<<sum<<endl;
47: if(max < sum)
48: max = sum; //存入目前最大递增数
49: current = num[j];
50: temp=0;
51: }
52: }
53: cout<<max<<endl;
54: return 0;
55: }