本文主要是介绍浙大PAT 1025题 1025. PAT Ranking,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
排序模拟题,练练C/C++排序挺好的。
第一次:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
char number[20];
int score;
int final_rank;
int local_num;
int local_rank;
}Info;
Info info[30005];
int cmp(const void *m,const void *n){
Info *a=(Info *)m;
Info *b=(Info *)n;
if(a->score==b->score) return strcmp(a->number,b->number);
else return a->score<b->score;
}
int main(){
int i,j,N,K,off=0;
scanf("%d",&N);
for(i=1;i<=N;i++){
scanf("%d",&K);
for(j=off;j<off+K;j++){
scanf("%s %d",info[j].number,&info[j].score);
info[j].local_num=i;
}
qsort(info+off,K,sizeof(Info),cmp);
for(j=off;j<off+K;j++){
if(j!=off&&info[j].score==info[j-1].score) info[j].local_rank=info[j-1].local_rank;
else info[j].local_rank=j-off+1;
}
off=off+K;
}
qsort(info,off,sizeof(Info),cmp);
for(i=0;i<off;i++){
if(i!=0&&info[i].score==info[i-1].score) info[i].final_rank=info[i-1].final_rank;
else info[i].final_rank=i+1;
}
printf("%d\n",off);
for(i=0;i<off;i++){
printf("%s %d %d %d\n",info[i].number,info[i].final_rank,info[i].local_num,info[i].local_rank);
}
return 0;
}
第二次:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct NodeType{
char id[20];
int score;
int frank;
int lnum;
int lrank;
}Testee;
Testee t[30005];
int cmp(const void *a,const void *b){
Testee* ta=(Testee*)a;
Testee* tb=(Testee*)b;
if(ta->score==tb->score){
return strcmp(ta->id,tb->id);
}
else{
return tb->score-ta->score;
}
}
int main(){
int i,j,k,n;
int cnt=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&k);
int tmp=cnt;
for(j=0;j<k;j++){
scanf("%s %d",t[cnt].id,&t[cnt].score);
t[cnt].lnum=i+1;
cnt++;
}
qsort(t+tmp,cnt-tmp,sizeof(Testee),cmp);
t[tmp].lrank=1;
for(j=tmp+1;j<cnt;j++){
if(t[j].score==t[j-1].score){
t[j].lrank=t[j-1].lrank;
}
else{
t[j].lrank=j-tmp+1;
}
}
}
qsort(t,cnt,sizeof(Testee),cmp);
t[0].frank=1;
for(i=1;i<cnt;i++){
if(t[i].score==t[i-1].score){
t[i].frank=t[i-1].frank;
}
else{
t[i].frank=i+1;
}
}
printf("%d\n",cnt);
for(i=0;i<cnt;i++){
printf("%s %d %d %d\n",t[i].id,t[i].frank,t[i].lnum,t[i].lrank);
}
return 0;
}
这篇关于浙大PAT 1025题 1025. PAT Ranking的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!