足球联赛排名:大一上学期期末考试最后一题
下图输入样例:
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了,不太好理解,要自己找到一个能说服自己的理解方法才可以。
浙公网安备 33010602011771号