zoukankan      html  css  js  c++  java
  • HDU 2093 考试排名

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2093

    本题即为字符串处理以及sscanf函数以及排序的应用.

    sscanf函数的应用对此题有了很大帮助,方便快捷的得到字符串中的整形数据。

    要先对姓名按字典排序,以应对AC的题数和罚时都相同的情况。

    AC代码:

    #include<iostream>
    using namespace std;
    #include<string.h>
    char s[1000][15]={0};
    int A[1000]={0},B[1000]={0};
    int main()
    {
        //freopen("d:\\1.txt","r",stdin);
        int n,m,i,j,l;
        int k=0;
        cin>>n>>m;
        char name[15],score[15][15],temp[15];
        int t;
        while(scanf("%s",name)!=EOF)
        {
            int punish=0,k1=0;//punish代表罚时 k1代表AC题的个数
            int a,b;
            
            strcpy(s[k],name);
            for(i=0;i<n;i++)//依次输入每个题的解题情况
            {
                int p1=1,p2=1;
                scanf("%s",score[i]);
                l=strlen(score[i]);
                for(j=0;j<l;j++)
                 if(score[i][0]=='-'||score[i][0]=='0'){p1=0;break;}
                 else if(score[i][j]=='('){p2=0;break;}
                if(p1)
                {
                    if(p2)
                    {
                        sscanf(score[i],"%d",&a); //sscanf
                        punish+=a;                             
                    }
                    else
                    {
                        sscanf(score[i],"%d(%d)",&a,&b);//sscanf
                        punish=punish+a+b*m;        
                    }
                     k1++;
                } 
                
            }//for
            A[k]=k1;
            B[k]=punish;
            
            k++;//计算学生的数目
        }//while
        //接下来是排序  在此可以先测试一下输出结果 来判断做的是否正确
        
         for(j=k-1;j>=0;j--)//j=k-1而别错写成n-1
          for(i=0;i<j;i++)
          {
              if(strcmp(s[i],s[i+1])>0)//先按名字字典排序
               {
                   strcpy(temp,s[i]);
                   strcpy(s[i],s[i+1]);
                   strcpy(s[i+1],temp);
                   t=A[i];
                   A[i]=A[i+1];
                   A[i+1]=t;
                   t=B[i];         //真是的  把t错定义成char型的了  所以排序会出错
                   B[i]=B[i+1];
                   B[i+1]=t;
               }    
          }
          for(j=k-1;j>=0;j--)//再按AC的题数从大到小排序
           for(i=0;i<j;i++)
           {
               if(A[i]<A[i+1])
               {
                   strcpy(temp,s[i]);
                   strcpy(s[i],s[i+1]);
                   strcpy(s[i+1],temp);
                   t=A[i];
                   A[i]=A[i+1];
                   A[i+1]=t;
                   t=B[i];         
                   B[i]=B[i+1];
                   B[i+1]=t;
               }    
           }
           for(j=k-1;j>=0;j--)
           for(i=0;i<j;i++)
           {
               if(B[i]>B[i+1]&&A[i]==A[i+1])//按罚时从小到大排序
               {
                   strcpy(temp,s[i]);
                   strcpy(s[i],s[i+1]);
                   strcpy(s[i+1],temp);
                   t=A[i];
                   A[i]=A[i+1];
                   A[i+1]=t;
                   t=B[i];         
                   B[i]=B[i+1];
                   B[i+1]=t;
               }    
           }
         
        //输出最后结果
        for(i=0;i<k;i++)
         {
             printf("%-10s %2d %4d",s[i],A[i],B[i]);
             cout<<endl;
         }
        
        return 0;
    }

     

  • 相关阅读:
    springboot文件上传: 单个文件上传 和 多个文件上传
    Eclipse:很不错的插件-devStyle,将你的eclipse变成idea风格
    springboot项目搭建:结构和入门程序
    POJ 3169 Layout 差分约束系统
    POJ 3723 Conscription 最小生成树
    POJ 3255 Roadblocks 次短路
    UVA 11367 Full Tank? 最短路
    UVA 10269 Adventure of Super Mario 最短路
    UVA 10603 Fill 最短路
    POJ 2431 Expedition 优先队列
  • 原文地址:https://www.cnblogs.com/hsqdboke/p/2476817.html
Copyright © 2011-2022 走看看