ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PAT甲级1012,选择排序,测试点分析

2021-12-18 21:31:18  阅读:195  来源: 互联网

标签:positionmax PAT 函数 测试点 int 排序 stuid 1012 subject


PAT 甲级1012是一道排序的题,我没有如大多数人一样选择适用sort函数,而是使用了选择排序的方法写了一个函数。

这个函数需要三个参数,第一个参数是需要排序的数组的指针。第二个参数是需要排序的数组的size。第三个参数也是一个数组的指针,数组下标0、1、2分别对应第一、二、三个学生,以此类推,值在main函数中没有被初始化,经过选择函数操作进行赋值,相应的值就是这个学生该成绩的排名。

在main函数中调用排序函数四次,函数就可以生成四个分别对应A、C、M、E的排名数组,下标与学生id一一对应,第一个学生就可以通过下标0查看其排名,以此类推。

5个测试点中,如果没有对相同成绩的情况进行处理,2、3测试点会通不过,我在排序函数中的最后进行了专门处理。

交流可加QQ:1724330748

#include<iostream>
#include<cstring>

void xuanze(int *subject, int N, int *subrank);
using namespace std;

void xuanze(int *subject, int N, int*subrank)
{
    int stuid[N];for(int i=0;i<N;i++){stuid[i]=i;}
   
    for(int i=0;i<N;i++){
       int positionmax=i;
       
       for(int loca=i;loca<N;loca++){
           if(subject[loca]>subject[positionmax])positionmax=loca;}
       
       int temp1=subject[i];
       subject[i]=subject[positionmax];
       subject[positionmax]=temp1;

       int temp2=stuid[i];
       stuid[i]=stuid[positionmax];
       stuid[positionmax]=temp2;}

       for(int ID=0;ID<N;ID++){for(int j=0;j<N;j++){if(stuid[j]==ID)subrank[ID]=j;}}

       for(int sameid=0;sameid<N-1;sameid++){
           if(subject[sameid]==subject[sameid+1])
           {
           //一个名次是sameid,一个名次是sameid+1
           int tempid1, tempid2;
           for(int i=0;i<N;i++){if(subrank[i]==sameid)tempid1=i;}
           for(int i=0;i<N;i++){if(subrank[i]==sameid+1)tempid2=i;}
           subrank[tempid2]=subrank[tempid1];
           }
       
       }
                                       
    }

int main()
{
    int N, M, i, j, k, l;
    cin>>N>>M;
    string stuida[N], stuidb[M];
    int Cp[N], Ma[N], En[N];

    for(i=0;i<N;i++){
        cin>>stuida[i]>>Cp[i]>>Ma[i]>>En[i];
    }
    for(j=0;j<M;j++){
        cin>>stuidb[j];
    }
    int An[N];
    for(k=0;k<N;k++){An[k]=(Cp[k]+Ma[k]+En[k])/3;}

    int Anrank[N],Cprank[N],Marank[N],Enrank[N];
    xuanze(An,N,Anrank);
    xuanze(Cp,N,Cprank);
    xuanze(Ma,N,Marank);
    xuanze(En,N,Enrank);

    for(l=0;l<M;l++){
        bool cunzai=false;
        for(int o=0;o<N;o++){

            if(stuidb[l]==stuida[o]){
            cunzai=true;
            char bestsub='A';
            int bestrank=Anrank[o]+1;

            if(Cprank[o]+1<bestrank){bestsub='C';bestrank=Cprank[o]+1;}
            if(Marank[o]+1<bestrank){bestsub='M';bestrank=Marank[o]+1;}
            if(Enrank[o]+1<bestrank){bestsub='E';bestrank=Enrank[o]+1;}
            cout<<bestrank<<" "<<bestsub<<endl;
            }
        }
      if(cunzai==false)cout<<"N/A"<<endl;
    }
    return 0;
}

标签:positionmax,PAT,函数,测试点,int,排序,stuid,1012,subject
来源: https://blog.csdn.net/weixin_51117781/article/details/122017098

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有