0
已解决
陆麟瑞1172怎么做
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct st
{
char name[51] ;
char sc[501] ;
}st ;
st a[501] ;
int comp( const void *a , const void *b )
{
if( strlen( ((st *)a)->sc ) != strlen( ((st *)b)->sc ) )
return strlen( ((st *)b)->sc ) - strlen( ((st *)a)->sc ) ;
return strcmp( ((st *)b)->sc , ((st *)a)->sc ) ;
}
int main()
{
//freopen("in.txt","r", stdin) ;
int n , i ;
scanf("%d", &n ) ;
for( i = 0 ; i < n ; ++i )
{
scanf("%s%s", a[i].name , a[i].sc ) ;
}
qsort( a , n , sizeof(a[0]) , comp ) ;
for( i = 0 ; i < n ; ++i )
puts( a[i].name ) ;
return 0 ;
}
0
已采纳
这道题可以利用sort + 结构体;
然后sort判断:
bool cmp(fs a,fs b)
{
if(a.score.size()!=b.score.size())// 分数长度不等,不可以直接比大小
return a.score.size()>b.score.size();// 则分数越长越大
else// 分数长度相等,可以直接比大小
{
if(a.score==b.score)// 当分数相等
return a.name<b.name;// 按照学生姓名排序
else return a.score>b.score;
}
}
如果还不会,请追问,望采纳!
1
0
0
0
