问题标题: 1172怎么做?

1
0

0
已采纳
张睿杰
张睿杰
初级天翼
初级天翼
int comp(const game&a,const game&b)
{
    if(a.score.size()>b.score.size()) return 1;
    else
    if(a.score.size()<b.score.size()) return 0;
    else
    if(a.score>b.score) return 1;
    else
    if(a.score<b.score) return 0;
    else
    if(a.name>b.name) return 0;
    else
    if(a.name<b.name) return 1;
    return 1;
}

 

0
梁锦程
梁锦程
高级光能
高级光能

是吗??!!

AC截图:

0
杨陈卓
杨陈卓
新手天翼
新手天翼
    string name;
    string score;
}a[500];

这是定义

0
朱宗晔
朱宗晔
初级光能
初级光能

核心部分

sort(a + 1, a + 1 + n,cmp);
    for(int i = 1;i <= n;i ++){
        cout << a[i].xm << endl;
    }

注意

struct fs{
    string fen;
    string xm;
}a[505];
int cmp(const fs& a,const fs& b){
    if(a.fen.size() != b.fen.size()) return a.fen.size() > b.fen.size();
    else if(a.fen != b.fen) return a.fen > b.fen;
    else return a.xm < b.xm;
}

不要少了

#include<algorithm>

 

0
梁锦程
梁锦程
高级光能
高级光能

你首先定义一个结构体

struct fs
{
    string name;
    string score;
} fs1[501];


然后写上面那个函数
主程序中写完读入后

sort(fs1,fs1+n,cmp);

最后输出就行了。
看看可行。
望采纳!

0
0
颜咏春
颜咏春
中级光能
中级光能
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 ) ;
 

若几个名字的得分相同,则按名字的字典顺序先后排列。

0
贺晓雨
贺晓雨
资深守护
资深守护
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 ) ;

希望能帮到你。

0
梁锦程
梁锦程
高级光能
高级光能

这道题可以利用 结构体+排序 写,

分为三类比较,代码如下(P.S.仅供参考)

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;
    }
}

 

0
刘振波
刘振波
初级光能
初级光能

你的是错的

刘振波在2018-01-11 17:15:58追加了内容

不会吧!

0
黄俊博
黄俊博
资深光能
资深光能
老师说了,能用sort,所以就~~~~~~~
int comp(const game&a,const game&b)
{
    if(a.score.size()>b.score.size()) return 1;
    else
    if(a.score.size()<b.score.size()) return 0;
    else
    if(a.score>b.score) return 1;
    else
    if(a.score<b.score) return 0;
    else
    if(a.name>b.name) return 0;
    else
    if(a.name<b.name) return 1;
    return 1;
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i].name>>a[i].score;
    }
    sort(a+0,a+n,comp);

剩下的输出什么的补一下吧!

望采纳,谢谢。

我要回答