求最大递增数

同学发过来个文件,让我帮他做几个题目的,就做了下,贴在这里

题目:

描述:
输入一串数字,找到其中包含的最大递增数。递增数是指相邻的数位从小到大排列的数字。如: 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:  }
posted @ 2014-03-13 16:17  人若无名  阅读(972)  评论(0编辑  收藏  举报