1.结构体数组与函数传参
2.二维数组与函数传参(第二维大小不能省略)
3.在C99标准中不允许将字符串(实际上是一个指针变量) 赋值给数组{可以直接定义/用strcpy函数/memset}
4.字符串不能直接比大小 要用strcmp函数
5.德才排名制信息点漏了
6.oj上可以 编译器上却不行 Dev C++怎么回事呀 不懂 (因为数组输入加了地址符,不应该加的)
7.有两个测试超时了 (快排)
#includestruct student { char s[9]; int d; int c; int sum; }; int main() { int N,L,H; int xh[4][100000],cnt[4]; scanf("%d %d %d",&N,&L,&H); struct student stu[N]; struct student *p=stu; void inputandsort(int N,struct student stu[],int xh[][100000],int cnt[],int H,int L); void paixu(struct student stu[],int xh[][100000],int cnt[]); inputandsort(N,p,xh,cnt,H,L); paixu(p,xh,cnt); printf("%dn",cnt[0]+cnt[1]+cnt[2]+cnt[3]); for(int i=0; i<4; i++){ for(int j=0; j = L && stu[i].c >= L) { if( stu[i].d >= H && stu[i].c >= H ) xh[0][cnt[0]++]=i; else if( stu[i].d >= H ) xh[1][cnt[1]++] = i; else if( stu[i].d > stu[i].c ) xh[2][cnt[2]++] = i; else if( stu[i].d >= L && stu[i].c >= L ) xh[3][cnt[3]++] = i; } } } void paixu(struct student stu[],int xh[][100000],int cnt[]) { printf("enter!"); int i,j,k,t,m; for(i=0 ; i<4; i++) { for(j=0 ; j stu[xh[i][m]].sum) m=k; if(stu[xh[i][k]].sum = stu[xh[i][m]].sum && stu[xh[i][k]].s < stu[xh[i][m]].s) m=k; } if(m!=j) { t=xh[i][j];xh[i][j]=xh[i][m];xh[i][m]=t; } } } }
贴一个
int cmp(const void *a,const void *b)
{
return *(类型*)a-*(类型*)b;(升序)
//return *(类型*)b-*(类型*)a;(降序)
}
int main()
{
qsort(数组,数组长度,sizeof(数组类型),cmp);
}
1
2
3
4
5
6
7
8
9
#include
#include
typedef struct
{
int number,d,c,f;
}ks;
int cmp(const void *a,const void *b)
{
ks k1=*(ks *)a;
ks k2=*(ks *)b;
if(k1.f!=k2.f) return k1.f-k2.f;//先对考生的等级进行排序
else if((k1.d+k1.c)!=(k2.d+k2.c)) return (k2.d+k2.c)-(k1.d+k1.c);//按总分排序
else if(k1.d!=k2.d) return k2.d-k1.d;//如果总分也相同就按德分进行排序
else return k1.number-k2.number;//最后按照名字排序
}
int main()
{
int N,h,l,count=0;
scanf("%d%d%d",&N,&l,&h);
ks k[N];
for(int i=0;i=l&&k[i].c>=l)//对德才分都高于最底线的进行等级的划分
{
count++;//达标人数
if(k[i].d>=h&&k[i].c>=h) k[i].f=1;//德才分都高于高分线
else if(k[i].d>=h) k[i].f=2;//德分高于高分线
else if(k[i].d>=k[i].c) k[i].f=3;//德分高于才分
else k[i].f=4;//其他情况
}
else k[i].f=5;没超过分数线
}
qsort(k,N,sizeof(ks),cmp);
printf("%dn",count);
for(int i=0;i



