题目:
从键盘输入10个数据,存入数组当中,统计数组当中出现次数最多的数是哪一个数,并且输出其出现次数。(如果有次数相同则输出第一个出现数字)。
解题思路:
解决这道题目,关键在于如何统计数组中每个数的出现次数。我在这里定义了两个数组,分别为数组a和数组b,数组a用来存储输入的十个数据,数组b用来存储对应数据的出现次数。(这里说明一下,因为我将数组b的赋值操作置于两个循环间,所以次数存放位置的下标和对应数据的下标是对应的。如:b[0]是a[0]出现的次数)
下面我解释一下个数是如何统计的,我利用嵌套for循环的特点(内层循环完,外层循环一次)对数组a进行一个双重的遍历。那么外层循环一次就是在进行用数组a中一个数据去和所有数据进行比较,如果相等执行count++,因为count被初始化为0,相等一次count为1,相等两次count为2,依此类推。当内层循环结束后,完成对数组a中一个元素出现次数的统计,重复内层循环多次,完成对数组a中所有元素出现次数的统计。注意:每次统计一个元素的出现次数并记录后,要对计数变量清零。
程序代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[10],b[10];//数组b中对应存储a中每一个数的出现次数
int i,j,k = 0,count = 0;
printf("请输入10个数:");
for(i = 0; i < 10; i++){//给数组赋值
scanf("%d",&a[i]);
}
for(i = 0; i < 10; i++){
for(j = 0; j < 10; j++){
if(a[i] == a[j]){//因为count的初值是0,只出现一次的数,count为1,统计是正确的。
count++;
}
}
b[k] = count;
count = 0;//计数清零,下一轮统计下一个数的出现次数
k++;
}
int max = b[0],l;
for(j = 0; j < 10; j++){
if(b[j] > max){
max = b[j];//找到次数的最大值
l = j;//记录次数最多的数的对应下标
}
}
printf("在数组中出现最多的数是:%d,出现的次数为:%d\n",a[l],max);
return 0;
}
运行结果:
请输入10个数:1 5 77 68 25 36 25 48 25 68
在数组中出现最多的数是:25,出现的次数为:3