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;
    }

     

  • 相关阅读:
    P1144 最短路计数 题解 最短路应用题
    C++高精度加减乘除模板
    HDU3746 Teacher YYF 题解 KMP算法
    POJ3080 Blue Jeans 题解 KMP算法
    POJ2185 Milking Grid 题解 KMP算法
    POJ2752 Seek the Name, Seek the Fame 题解 KMP算法
    POJ2406 Power Strings 题解 KMP算法
    HDU2087 剪花布条 题解 KMP算法
    eclipse创建maven项目(详细)
    maven的作用及优势
  • 原文地址:https://www.cnblogs.com/hsqdboke/p/2476817.html
Copyright © 2011-2022 走看看