您的位置:首页 > 其它

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

2012-10-19 15:40 260 查看
问题:输入任意多个一位数字(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
;                      //变长数组,编译器需要支持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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numbers input 编译器 ini c
相关文章推荐