看到论坛里一个小问题,自己也写了下

来源:互联网 发布:会议抽奖软件 编辑:程序博客网 时间:2024/06/05 12:04

问题:输入任意多个一位数字(0-9),然后按照出现次数输出.

我写的对应功能如下:

1.可以接受任意多个一位数;

2.按照出现次数多少排序输出;

3.如几个数字出现次数相同时,按照数字由大到小排序(这个要是由小到大就能省去冒泡排序后的那一块儿).


#include<stdio.h>  void Pro(int ar[],int n);void Bubble_Sort(int Num[],int len);  //冒泡排序  int Idex[10]={0,1,2,3,4,5,6,7,8,9};   //可能出现的数字组成的数组int main(void)  {      int i,n;          puts("Input the number of elements to the array:");          scanf("%d",&n);      int ar[n];                      //变长数组,编译器需要支持C99标准才行.       puts("Input n numbers:");      for(i=0;i<n;i++)                //读取数组元素          scanf("%d",&ar[i]);      Pro(ar,n);        putchar('\n');    return 0;  }  void Pro(int ar[],int n){     int i,j=0,temp;     int Num[10]={0};      for(i=0;i<n;i++)     //统计各个数字出现的次数      {         temp=ar[i];         switch(temp)         { case 0:Num[0]++;break; case 1:Num[1]++;break; case 2:Num[2]++;break; case 3:Num[3]++;break; case 4:Num[4]++;break; case 5:Num[5]++;break; case 6:Num[6]++;break; case 7:Num[7]++;break; case 8:Num[8]++;break; case 9:Num[9]++;break; default :       break;         }     }    Bubble_Sort(Num,10);                    //排序           for(i=1;i<10;i++)                       //如果出现次数相同,则按数字由大到小排列         for(j=0;j<10-i;j++)        {            if(Num[j]==Num[j+1] && Num!=0)                if(Idex[j]<Idex[j+1])                {                    temp=Idex[j];                    Idex[j]=Idex[j+1];                    Idex[j+1]=temp;                }        }         puts("统计结果如下(出现次数由多到少排序,出现次数相同时按数字由大到校排序,数字后括号内为其出现的次数统计):");    for(i=0;i<10;i++){if(0!=Num[i])             //过滤掉后面次数为0的元素             printf("%d(%d)  ", Idex[i],Num[i]);}putchar('\n');     }void Bubble_Sort(int Num[],int len)      //冒泡排序  {      int i,j,temp1,temp2;      for(i=1;i<len;i++)      {          for(j=0;j<len-i;j++)            //循环找到下沉"气泡",每下沉一位,下次比较长度小一位           {              if(Num[j]<=Num[j+1])              {                  temp1=Num[j];          //数字交换                 Num[j]=Num[j+1];                  Num[j+1]=temp1;temp2=Idex[j];        //次数对应数字也同时移动 Idex[j]=Idex[j+1];Idex[j+1]=temp2;            }          }      }  }  


原创粉丝点击