2016 阿里校招研发算法题 9.9

题目大意:

输入一个字符串流,里面有数字和非数字,非数字将数字隔开了,要找出,出现次数最多的数字。

 

思路:

先将所有非数字用统一字符替换,然后找出数字,需要判断下一个字符是不是数字,然后将数字存到hashmap里面,出现存在过的数字,hashmap的value+1;最后输出value值最大的数字。

 

代码:

 1 #include"iostream"
 2 #include"map"
 3 #include"vector"
 4 #include"algorithm"
 5 #define MAX 10000
 6 using namespace std;
 7 
 8 char c[MAX];
 9 bool tag;
10 map<int, int> m,msort;
11 
12 int main()
13 {
14     while (cin >> c)
15     {
16         tag = false;
17         for (int i = 0; i < strlen(c); i++)
18         {
19             if (c[i] < '0' || c[i]>'9')
20                 c[i] = '*';
21             cout << c[i];
22         }
23         cout << endl;
24         for (int i = 0,j=0; i < strlen(c); i++)
25         {
26             int t=0;
27             while (c[i] == '*')
28                 i++;
29             while (c[i] != '*'&&c[i]!='\0')
30             {
31                 tag = true;
32                 t += c[i] - '0';
33 
34                 if (c[i + 1] == '\0')
35                     break;
36 
37                 if (c[i + 1] == '*')
38                     tag = false;
39 
40                 if (tag)
41                     t *= 10;
42                 i++;
43             } 
44             if (m.count(t))
45             {
46                 m[t]++;
47             }else                
48                 m[t] = 1;
49 
50             j++;
51         }
52 
53         map<int, int>::iterator res = m.begin();
54         for (map<int, int>::iterator iter = m.begin(); iter!=m.end(); iter++)
55         {
56             if (iter->second > res->second)
57                 res = iter;
58 
59         }
60         cout << res->first << endl;
61 
62         m.clear();
63     }
64     system("pause");
65 
66 }

 

posted @ 2016-09-10 12:01  SeeKHit  阅读(537)  评论(0编辑  收藏  举报