习题3-1 分数统计
输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。
任务1:分数均为不超过100的非负整数
任务2:分数均为不超过100的非负实数,但最多保留两位小数
#include<stdio.h>
#include<string.h>
#define MAXN 5000
int s[MAXN],m[MAXN][2];
int main()
{
double x;
freopen("xt3-1.in","r",stdin) ;
int i=0,j=0,temp=0,length,min,max=0,last;
while(scanf("%lf",&x) == 1)
{
temp=x*1000;
temp=temp%10;
if (temp>=5) s[i++]=x*100+1;
else
s[i++]=x*100;
printf("%d-%.2lf-%d ",i-1,x,s[i-1]);
}
printf("\n");
length = i-1;
for(i=0;i<=length;i++)
{
min=s[i];
for (j=0;j<=i-1;j++)
{
if (min<=s[j])
{
min=s[j];
s[j]=s[i];
s[i]=min;
for (j=j+1;j<=i;j++)
{
min=s[j];
s[j]=s[i];
s[i]=min;
//printf("%d %d %d\n",min,i ,j);
}
}
}
}
j=0;
for(i=0;i<=length;i++)
{
last=i-1;
if ((i>0)&&(s[last]==s[i]))
{
m[j][1]++;
if (max<m[j][1]) max=m[j][1];
//printf("+ s[%d]=%d max=%d m[%d][1]=%d m[%d][0]=%d \n",i,s[i],max,j,m[j][1],j,m[j][0]);
}
else
{
if (i!=0) j++;
m[j][0]=s[i];
m[j][1]=1;
// printf("n s[%d]=%d max=%d m[%d][1]=%d m[%d][0]=%d \n",i,s[i],max,j,m[j][1],j,m[j][0]);
}
}
//for (i=0;i<=max;i++) printf("m[%d][0]=%d m[%d][1]=%d\n",i,m[i][0],i,m[i][1]);
for(i=0;i<=length;i