网站的建设报价,道县找人做网站,安阳建设网站哪家好,网站推广方案注意事项一#xff1a;题目
计算机程序设计能力考试#xff08;Programming Ability Test#xff0c;简称PAT#xff09;旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力#xff0c;科学的评价计算机程序设计人才#xff0c;为企业选拔人才…一题目
计算机程序设计能力考试Programming Ability Test简称PAT旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力科学的评价计算机程序设计人才为企业选拔人才提供参考标准网址http://www.patest.cn。
每次考试会在若干个不同的考点同时举行每个考点用局域网产生本考点的成绩。考试结束后各个考点的成绩将即刻汇总成一张总的排名表。
现在就请你写一个程序自动归并各个考点的成绩并生成总排名表。
输入格式: 输入的第一行给出一个正整数N≤100代表考点总数。随后给出N个考点的成绩格式为首先一行给出正整数K≤300代表该考点的考生总数随后K行每行给出1个考生的信息包括考号由13位整数字组成和得分为[0,100]区间内的整数中间用空格分隔。
输出格式: 首先在第一行里输出考生总数。随后输出汇总的排名表每个考生的信息占一行顺序为考号、最终排名、考点编号、在该考点的排名。其中考点按输入给出的顺序从1到N编号。考生的输出须按最终排名的非递减顺序输出获得相同分数的考生应有相同名次并按考号的递增顺序输出。
输入样例:
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85输出样例:
9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4二:思路
利用结构体存储 学号 成绩 总排名 考点号 本考点的排名 然后在输入的时候 要记得 将 j 设置成一个变量这样就能挨个把所有的值都输入到结构体数组当中。再然后就是向结构体里的变量进行赋值。
三上码
/**利用结构体数组重写送sort方法
*/
#includebits/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].id stu[j].grate;stu[j]. examsite i 1;//记录考点}sort(stusum,stusumK,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;elsestu[j].siteranking count; }count; } sum K; }//还剩下总排名未处理 sort(stu,stusum,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;elsestu[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方法
*/
#includebits/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;//记录考点号 mapstring,intm1,m2,m3; //m1对应总的人数一个考号对应一个人m2为一个考号对应一个考点号m3为一个考号对应其在自己考点的排名 mapstring,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,nodeK,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,stusum,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;}} for( t m3.begin(); t ! m3.end(); t ){if( stu[i].id t-first ){cout t-second endl; break;}} }} //8
//3
//1234567890001 95
//1234567890005 100
//1234567890003 95
//2
//1234567890002 77
//1234567890004 85
//2
//1234567890013 65
//1234567890011 25
//2
//1234567890014 100
//1234567890012 85
//3
//1234567890016 89
//1234567890017 90
//1234567890018 69
//2
//1234567890020 63
//1234567890021 76
//1
//1234567890023 56
//2
//1234567890024 78
//1234567890026 90