#import <Foundation/Foundation.h>
/*要求:输入10个数,找出出现次数最多的数 (如果多个并列,则按数字出现顺序分别输出)
思路:1、创建个数组存储十个数;
2、创建个二维数组,遍历原数组,第一列用于存放元素,第二列用于存放次数;
3、比较出现次数输出最大的,并记录;
4、输出数组值。找是否有次数相同的有的话,输出;
*/
void getMostTime(int arr[]){
// 定义用于存储数字和出现次数的容器,共两种采用二维数组,最多十个数,所以位10 2
//用brr[][0]存储数值,brr[][1]存储次数
int brr[10][2];
//定义不相同数的个数unsamecount,用于后期存储分配内存
//定义个flag标记用于判断是否已经存储相同数值
int unsamecount=0,flag=0;
for (int i=0; i<10; i++) {
//若相同数值为存储,开辟新空间存储其,次数归一
if (flag==0) {
//存储数值
brr[unsamecount][0]=arr[i];
//存储次数并初始化
brr[unsamecount][1]=1;
// 此处位置,为下一个数值分配下一个位置
unsamecount++;
}
//每次判断标记初始化
flag=0;
for (int j=0; j<i; j++) {
//判断是否已经存储相同数值,通过改变标记让后续程序了解
//如果存在对应次数加一
if(brr[j][0]==arr[i]){
brr[j][1]=brr[j][1]+1;
flag ++;
break;
}
}
}
//定义出现最大次数标记并初始化,定义出现最大次数为主标记方便后续输出
int max=brr[0][1],maxindex=0;
// 找寻出现最大次数数值对应的位置
for (int i=0;i<unsamecount ; i++) {
if (max<brr[i][1]) {
max=brr[i][1];
maxindex=i;
}
}
printf("出现次数最多的数依次是\n");
//输出对应数值和次数,为避免有相同次数对此位置后各次数均进行判断
for (int i=maxindex; i<unsamecount; i++) {
if (brr[maxindex][1]==brr[i][1]) {
printf("数字:%d\t次数:%d\n",brr[i][0],brr[i][1]);
}
}
}
int main(int argc, const char * argv[]) {
// 定义存储是个数字的容器,此处为数组
int arr[10];
printf("请输入十个数:\n");
//输入数据
for (int i=0; i<10; i++) {
scanf("%d",&arr[i]);
}
//获得出现次数多的数并打印
getMostTime(arr);
return 0;
}
|