任意输入10 个正整数,求其中互不相同的数的个数num,以及此num 个数中哪一个数的出现次数最多,共出现了几次。
例如,当输入的10 个数为:3、2、4、1、3、2、3、5、3、8,则其中互不相同的数的个数num=6,而3 出现次数最多,共出现了4 次。
c语言数组题,我想知道的是解题思路,简单一点就好
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
五一编程 2021-12-04 18:48关注#include <stdio.h> #define MAX 11 /*输入MAX-1个整型数字,找出不同数字的个数,并且给出出现次数最多的数字。*/ void sel_sort(int n , int a[],int seq)/*选择排序 seq:0为由小到大,1为由大到小*/ { int i=0,j=0 ,min=0,tmp; for(i=0 ; i<n-1 ; i++) { min=i; for(j=i+1 ; j<n ; j++) { if(seq==0){ if(a[j]<a[min]) min=j; } if(seq==1){ if(a[j]>a[min]) min=j; } } tmp=a[i]; a[i]=a[min]; a[min]=tmp; } } int main() { int tmp,num,max,i=0,j=0; int a[MAX]={0},b[2][MAX]={0}; printf("Please input:\n"); for(i=0;i<MAX-1;i++) { scanf("%d",&a[i]); } sel_sort(MAX-1,a,0); num=1; b[0][0]=a[0]; b[1][0]=1; tmp=1; for(i=0;i<MAX-2;i++) { if(a[i+1]!=a[i]){ b[0][num]=a[i+1]; b[1][num-1]=tmp; tmp=1; num+=1; } else{ tmp+=1; } } b[1][num-1]=tmp; /*二维数组排序*/ for(i=0 ; i<num-1 ; i++) { max=i; for(j=i+1 ; j<num ; j++) { if(b[1][j]>b[1][max]) max=j; } tmp=b[1][i]; b[1][i]=b[1][max]; b[1][max]=tmp; tmp=b[0][i]; b[0][i]=b[0][max]; b[0][max]=tmp; } /*完成二维数组排序*/ printf("\nnum=%d\n",num); printf("NUM[0]=%d cnt=%d\n",b[0][0],b[1][0]); for(i=1;i<num;i++) { if(b[1][i-1]==b[1][i]) printf("NUM[%d]=%d cnt=%d\n",i,b[0][i],b[1][i]); else break; } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录