麻烦帮我看见哪里有问题,我一直找不出来,有的测试点一直过不了
定义结构体struct stu,编写成绩排名函数:void sort(struct stu *ps,int n),对结构体数组按成绩排名。 程序功能为读入整数N(N<100),再读入N个学生的学号(整型)和成绩(实数)。按样例输出排名。
输出格式:
第一列是名次,注意并列情况;第二列是学号,第三列是成绩(2位小数)。
输入样例:
5
101 99
102 100
103 50
104 80
105 99
输出样例:
1 102 100.00
2 101 99.00
2 105 99.00
4 104 80.00
5 103 50.00
#include <stdio.h>
struct stu
{
int num;
double grade;
};
void sort(struct stu *ps,int n)
{
int i,j,t,m;
for(i=0;i<n;i++){
scanf("%d %lf",&ps[i].num,&ps[i].grade);
}
for(i=0;i<n;i++){
for(j=i;j<n-i-1;j++){
if(ps[j].grade<ps[j+1].grade){
t=ps[j].grade;
ps[j].grade=ps[j+1].grade;
ps[j+1].grade=t;
m=ps[j].num;
ps[j].num=ps[j+1].num;
ps[j+1].num=m;
}
}
}
int k=1,p=1;
for(i=0;i<n;i++){
if(ps[i-1].grade!=ps[i].grade){
printf("%d %d %.2f\n",p,ps[i].num,ps[i].grade);
k=p;
p++;
}else{
printf("%d %d %.2f\n",k,ps[i].num,ps[i].grade);
p++;
}
}
}
int main()
{
int n;
scanf("%d",&n);
struct stu p[100];
sort(p,n);
return 0;
}
冒泡排序第二个循环应该是j从0开始,j<n-1 ,
int i,j,t,m;
for(i=0;i<n;i++){
scanf("%d %lf",&ps[i].num,&ps[i].grade);
}//这个大话号错了,用中文的了,其他没问题,测试可得样例结果
测试点过不了是超时还是数据错误?
void sort(struct stu *ps,int n)
{
int i,j,t,m;
struct stu tmp;
for(i=0; i<n; i++)
scanf("%d %lf",&ps[i].num,&ps[i].grade);
for(i=0; i<n-1; i++) //for(i=0; i<n; i++)
{
for(j=i; j<n; j++) //for(j=i; j<n-i-1; j++)
{
if(ps[i].grade < ps[j].grade) //if(ps[j].grade<ps[j+1].grade)
{
tmp=ps[j];
ps[j]=ps[i];
ps[i]=tmp;
}
}
}
for(i=0; i<n; i++)
printf("%d %d %.2lf\n",i+1,ps[i].num,ps[i].grade);//%.2lf
}
编译错误了