首页 > 代码库 > 2016 阿里校招研发算法题 9.9

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 }

 

2016 阿里校招研发算法题 9.9