足球联赛排名:大一上学期期末考试最后一题

下图输入样例:
4
1 2 0 2
1 3 1 1
1 4 0 0
2 3 2 0
2 4 4 0
3 4 2 2

输出样例:
2 3 1 4

代码示例:
struct competition
{
int num1;
int num2;
int num1score;
int num2score;
};

struct team
{
int num=0;
int jf=0;
int jsq=0;
int zjq=0;
int ts=0;
};

int main()
{
int n;
cin>>n;
team t[n+1];
for(int i=1;i<=n;i++)
{
t[i].num=i;
}
int sum=n*(n-1)/2;
competition com[sum];
for(int i=0;i<sum;i++)
{

	cin>>com[i].num1;
	cin>>com[i].num2;
	cin>>com[i].num1score;
	cin>>com[i].num2score;
	//利用选择语句解决胜负积分的问题 
	if(com[i].num1score>com[i].num2score)
	{
		t[com[i].num1].jf+=3;
	}
	else if(com[i].num1score<com[i].num2score)
	{
		t[com[i].num2].jf+=3;
	}
	else 
	{
		t[com[i].num2].jf+=1;
		t[com[i].num1].jf+=1;
	}
	//接下来统计净总进球
	t[com[i].num1].zjq+=com[i].num1score;
	t[com[i].num2].zjq+=com[i].num2score;
	//接下来是净胜球
	t[com[i].num1].jsq+=(com[i].num1score-com[i].num2score);
	t[com[i].num2].jsq+=(com[i].num2score-com[i].num1score);
}
for(int i=1;i<=n;i++)
{
	t[i].ts=t[i].jf*1000000+t[i].jsq*1000+t[i].zjq;
}
for(int i=1;i<=n;i++)
{
	int max=1;
	for(int j=1;j<=n;j++)
	{
		if(t[j].ts>t[max].ts)
		{
			max=j;
		}
	}
	cout<<max;
	t[max].ts=0;
}

system("pause");
return 0;

}

我的思路是利用结构体数组,最后比较大小的方法值得学习,但是最稳妥的是jf25002500+jsq*2500+总进球
至于进率为什么是2500,是因为队伍总数小于50,总进球数小于50,所以进率就是2500了,不太好理解,要自己找到一个能说服自己的理解方法才可以。

posted @ 2025-07-24 19:40  暗神酱  阅读(6)  评论(0)    收藏  举报