请用sort 题解

题目传送门:请用sort
通过代码:

#include <bits/stdc++.h>
using namespace std;
struct FT{
	int score,ball,net;
	string s;
}ft[1000];
bool cmp(FT a,FT b){
if(a.score!=b.score){
	    return a.score>b.score;
    }
    if(a.net!=b.net){
 	return a.net>b.net;
    }
    if(a.ball!=b.ball){
        return a.ball>b.ball;
    }
    return a.s<b.s;
}
void caculate(int p,int q,int ct){
	if(p>q)ft[ct].score+=3;
        else if(p==q)ft[ct].score+=1;	
        ft[ct].ball+=p;
        ft[ct].net+=(p-q);
}
void clean(int x){
    for(int i=1;i<=x;i++){
        ft[i].score=0;
        ft[i].ball=0;
        ft[i].net=0;
        ft[i].s='/0';
    }
}
int n,p,q,ct,j,ctt,mid;
string a,b;
int main() {
	while(cin>>n){
		ct=1;
		for(int i=1;i<=n*(n-1);i++){
			cin>>a>>b>>b;
			scanf("%d:%d",&p,&q);//get data
			ctt=0;//renew ctt
			for(j=1;j<=ct;j++)//caculate data a
				if(a==ft[j].s){ctt=1;break;}
			if(ctt==1)caculate(p,q,j);
			else{
			ft[ct].s=a;
			caculate(p,q,ct);
			ct++;
			}
			ctt=0;//rener ctt
			for(j=1;j<=ct;j++)//caculate data b
				if(b==ft[j].s){
				ctt=1;break;}
			if(ctt==1)caculate(q,p,j)
			else{ft[ct].s=b;
			caculate(q,p,ct);
			ct++;
			}
	}
		sort(ft+1,ft+1+n,cmp);
		for(int i=1;i<=n;i++)
		cout<<ft[i].s<<" "<<ft[i].score<<endl;
		clean(ct);
		cout<<endl;
	}
	return 0;
}//这个编辑器的Tab符有点长,格式见谅

思路梳理:本题关键步骤有两步,即收集各球队的分数、净进球数、总进球数,并想办法根据上述三种数据和球队名称字典序对这些球队排序。说实话,博主才疏学浅,只知道sort的正、倒排序(定义一个cmp函数),并不清楚怎样用sort进行多条件排序,所以想重新写一个排序的函数,第一遍这样AC了,但想题目叫做请用sort,肯定涉及到sort的高级用法,便百度到sort双(多)关键字排序,如法炮制,第二次提交时考虑不全,下面分享错误代码:

bool cmp(FT a,FT b){
    if(a.score>b.score)return true; 
    else if(a.score<b.score)return false;
    else{
        if(a.ball>b.ball)return true;
        else if(a.ball<b.ball)return false;
        else{
            if(a.net>b.net)return true;
            else if(a.net<b.net)return false;
            else{
                if(a.s>b.s)return true;
                else if(a.s<b.s)return false;
            }
        }
    }
}

显然没有考虑相等的情况😭

因为与球队的数据要绑在一起,我首先想到的是结构体,不知道还有没别的好用的结构?求看到的童鞋援助。。。

开始我处理数据用的是一个函数,但是不知道处理第二组数据时结构体数组怎么清零,就在主函数内定义了结构体数组,以为这样每次初始化会为零,但没有用,只好处理完一组数据之后就用循环给结构体清零,为了是程序更加明了,我还是改改。

絮絮叨:肺炎疫情使寒假无限期延长,没想到寒假已经开始了将近半个月,而在这么长的假期中,我看书学习的时间并不多,竟有些惭愧,以后我遇到有价值的题目和一些问题,一定马上放在博客上,和大家共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值