1 //此次代码在codeblocks 17.12 下成功运行
2 #include <iostream>
3
4 using namespace std;
5 //时间换空间
6 /*
7 问题:
8 在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次
9 或者多次。设计一个算法,找出出现次数最多的数字
10 */
11
12 void Search(int *a, int len);
13
14 int main()
15 {
16 int ary[] = {1,1,2,8,8,8,9,4,4,5,6,7,9,9,9,9};
17 Search(ary,sizeof(ary)/sizeof(*ary));
18 return 0;
19 }
20
21 void Search(int *a, int len)
22 {
23 int sp[1000] = {0};
24 int i = 0;
25 int Max = 0;
26
27 //将数组中的值减1赋给另外一个数组的索引即下标
28 for(i=0; i<len; i++)
29 {
30 int index=a[i]-1;
31 sp[index]++; //计算每个数字出现的次数
32 }
33
34 //在新的数组空间内找出最大的次数
35 for(i=0; i<1000; i++)
36 {
37 if(Max < sp[i])
38 {
39 Max = sp[i];
40 }
41 }
42
43 //输出出现最多次数的数字
44 for(i=0; i<1000; i++)
45 {
46 if(Max == sp[i])
47 {
48 //cout << "数字出现最多的次数为 " << Max << endl;
49 cout << "出现次数最多的数字为 " << i+1 << endl;
50 }
51 }
52 }