文章目录
题目思路代码
总结
题目
思路
其实此题题目理解不难,考的就是你对结构体的处理方面问题! 思路上的步骤就是如下:
当输入一个考场的成绩时候,进行一次排序当所有考场的成绩输入完成后,再进行一次排序排序就用到了sort排序之后你要考虑怎么去排名
相同的是同一名次不相同的就需要自身加一(有两个都是最高分100,都是第一名,那么99分就不是第二了,应该是第三)
代码
#include<iostream>
#include <bits/stdc++.h>
using namespace std
;
struct node
{
string id
;
int score
,tot_rank
,location
,loc_rank
;
};
bool cmp(const node
&a
, const node
&b
)
{
return a
.score
==b
.score
? a
.id
<b
.id
: a
.score
>b
.score
;
}
int main()
{
int n
,m
,num
=0;
cin
>>n
;
struct node v
[30001];
for(int i
=1;i
<=n
;i
++)
{
cin
>>m
;
for(int j
=1;j
<=m
;j
++)
{
cin
>>v
[num
].id
>>v
[num
].score
;
v
[num
].location
=i
;
num
++;
}
sort(v
+num
-m
,v
+num
,cmp
);
v
[num
-m
].loc_rank
=1;
for(int j
=1;j
<m
;j
++)
{
if(v
[num
-m
+j
].score
==v
[num
-m
+j
-1].score
)
{
v
[num
-m
+j
].loc_rank
=v
[num
-m
+j
-1].loc_rank
;
}
else v
[num
-m
+j
].loc_rank
=j
+1;
}
}
sort(v
,v
+num
,cmp
);
v
[0].tot_rank
=1;
for(int i
=1;i
<num
;i
++)
{
if(v
[i
].score
==v
[i
-1].score
)
v
[i
].tot_rank
=v
[i
-1].tot_rank
;
else v
[i
].tot_rank
=i
+1;
}
cout
<<num
<<endl
;;
for(int i
=0;i
<num
;i
++)
{
cout
<<v
[i
].id
<<" "<<v
[i
].tot_rank
<<" "<<v
[i
].location
<<" "<<v
[i
].loc_rank
<<endl
;
}
return 0;
}
总结
此题其实不太难,我对结构体运用的不多,导致没有写出来.还是需要努力刷题.
大家好,我是大一小菜鸡,又菜瘾还大!!