本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例:
10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4
1 #include<stdio.h> 2 #define N 1000 3 //思路:使用两个数组,a[i] b[i],a[i]保存数据,b[i]保存每个数据出现的次数 4 // 然后找到出现次数最多的b[i],并且记录下其下标i,从而找到最大次数对应的数字。 5 int main() 6 { 7 int i, j, n; 8 int a[N]; 9 int b[N] = {0}; 10 int max; 11 int index = 0; 12 scanf("%d", &n); 13 for (i = 0; i < n; i++) 14 { 15 scanf("%d", &a[i]); 16 } 17 ///用双循环拿a[i]元素和a数组的每一个数比较(包括a[i]本身) 18 for (i = 0; i < n; i++) //记录每个数字出现的次数,每个数字至少出现一次,使用数组b[i]保存下来次数。 19 { 20 for (j = 0; j < n; j++) 21 { 22 if (a[i] == a[j]) 23 { 24 b[i]++;//表示第i个元素出现的次数 25 } 26 } 27 } 28 max = b[0]; 29 for (i = 1; i < n; i++) //查找最大的次数,记住最大次数的下标,使用该下标找到出现次数最大的数字。 30 { 31 if (max < b[i]) 32 { 33 max = b[i]; 34 index = i; 35 } 36 } 37 printf("%d %d ",a[index], max);///输出出现最多的数和次数 38 return 0; 39 }
思路和之前有两道题很类似,做法也很经典的,经常会用到的
注意点:
如何统计每个数的出现次数并找到最大出现次数?
1.开一个和a一样大的数组用来记录次数,通过一个双重循环(相当于复制了一遍a数组),将a数组中的每一个数字和复制的a数组的数依次比较,如果遇到相同的 则次数加1
这样就可以统计第i个数出现的次数是多少
2.最大次数--类似求数组中最大值的做法
先假设最大值下标为0,然后用循环if语句找出b数组中的最大值,找出最大值的下标赋值于index