===================================================================
利用结构体存储 学号 成绩 总排名 考点号 本考点的排名 ;然后在输入的时候 要记得 将 j 设置成一个变量,这样就能挨个把所有的值都输入到结构体数组当中。再然后就是,向结构体里的变量进行赋值。
===================================================================
/**
利用结构体数组,重写送sort方法
*/
#include<bits/stdc++.h>
using namespace std;
struct Node{
string id;
int grate;
int examranking;//考试排名
int examsite;//考点
int siteranking;//考点排名
};
//这是定义一个递减的sort
bool sort_Grate(Node a,Node b){
if( a.grate == b.grate )
return a.id < b.id;
return a.grate > b.grate;
}
int main(){
int N;
int sum = 0;
Node *stu = new Node[30005];
cin >> N;
for( int i = 0; i < N; i++ ){
int K;
cin >> K;
for( int j = sum; j < sum + K; j++ ){
cin >> stu[j]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎徽关注公zhong号:编程进阶路 加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
.id >> stu[j].grate;
stu[j]. examsite = i + 1;//记录考点
}
sort(stu+sum,stu+sum+K,sort_Grate);//这是处理每个考点内的排名
int count = 1;//记录排名
for( int j = sum; j < sum + K; j++ ){
if( j == sum){//处理第一个为排名第一的
stu[j].siteranking = count;
}else{
if( stu[j].grate == stu[j - 1].grate)
stu[j].siteranking = stu[j - 1].siteranking;
else
stu[j].siteranking = count;
}
count++;
}
sum += K;
}
//还剩下总排名未处理
sort(stu,stu+sum,sort_Grate); //每一次sort排序都是将 结构体里的变量都进行了排序(当然我们按照成绩进行排序)
for( int j = 0; j < sum; j++ ){
if( stu[j].grate == stu[j - 1].grate)
stu[j].examranking = stu[j - 1].examranking;
else
stu[j].examranking = j + 1;
}
cout << sum << endl;
for( int i = 0; i < sum; i++ ){
cout << stu[i].id << ' ' << stu[i].examranking << ' ' << stu[i].examsite << ' ' << stu[i].siteranking << endl;
}
}
===================================================================
兄弟们 最恶心东西我今天又遇到了,上面那个码的思路思路是我参考别人的,我自己写了一个码,pta上有两个点过不去,本来今天我早就下班了,可就是因为,有bug,测试了好多数据,都正常,就是tmd过不去,人都裂开了,要么让我没思路,,要么让我不会做,我都能接受,我做出来了,测试了好多数据正确,然后就。。。。害 老样子,记录失败的结果。加油兄各们!我要睡了
/**
利用结构体数组,重写送sort方法
*/
#include<bits/stdc++.h>
using namespace std;
struct Node{
string id;
int grate;
};
//这是定义一个递减的sort
bool sort_Grate(Node a,Node b){
if( a.grate == b.grate )
return a.id < b.id;
return a.grate > b.grate;
}
int main(){
int N,sum = 0;//sum为考生总人数
int count = 1;//记录考点号
map<string,int>m1,m2,m3; //m1对应总的人数(一个考号对应一个人),m2为一个考号对应一个考点号,m3为一个考号对应其在自己考点的排名
map<string,int>::iterator t;
cin >> N;
for( int i = 0; i < N; i++ ){
int K;
cin >> K;
sum += K;//统计考生数目
Node *node = new Node[K];//用于处理每个考点内的排名
for( int j = 0; j < K; j++ ){
string a;
int b;
cin >> a >> b;
m1[a] = b;
m2[a] = count;
node[j].id = a;
node[j].grate = b;
}
sort(node,node+K,sort_Grate);
for( int k = 0; k < K; k++ ){
string temp = node[k].id; //记录考点号
if( node[k-1].grate == node[k].grate ){//处理成绩相同的排名
m3[temp] = k - 1 + 1;
}else{
m3[temp] = k + 1;
}
}
count++;
}
//创建结构体数组
Node *stu = new Node[sum];
int k = 0;
for( t = m1.begin(); t != m1.end(); t++ ){
stu[k].id = t->first; stu[k].grate = t->second;
k++;
}
//排序
sort(stu,stu+sum,sort_Grate);
cout << sum << endl;
for( int i = 0; i < sum; i++){
cout << stu[i].id << ' ';
if( stu[i].grate == stu[i-1].grate ){
cout << i - 1 + 1 << ' ';//当分数相同时 需要和前面的人排名相同所以减一,加一是因为i是从0开始排的
}else{
cout << i + 1 << ' ';
}
for( t = m2.begin(); t != m2.end(); t++ ){
if( stu[i].id == t->first ){
cout << t->second << ' ';
break;
标签:sort,25,呀呀,int,sum,++,stu,grate From: https://blog.51cto.com/u_17015008/12088728