1. 程式人生 > >楊老師的課(JSU-ZJJ)

楊老師的課(JSU-ZJJ)

題目描述

楊老師是一位優秀的演算法課教師,他非常注重學生的動手能力。因此,他通過在judge online平臺上佈置作業來檢查學生的學習情況,並依據做題情況給定學生的成績排名。
楊老師給定了一個最少的做題數目t,學生必須完成至少t的題的數目,然後他給每一個學生做的題目打了一個平均分。最終排名的規則是,必須完成t個以上的數目,然後按照平均分排名,分數相等則按姓名的字典序排名。現在給定一個數字m,請列出前m名的學生姓名。
輸入
有多組測試資料。
每組資料的第一行為一個數N(1 <= N <= 1000),表示有多少學生(輸入0表示程式結束)。
接下來的N行,每一行開始為一個字串X(length(X) <=10),表示學生姓名;然後有一個數字Y(1 <= Y <= 100),表示該學生所做題目的平均分,最後一個數字Z(1 <= Z <= 50),表示學生做的題目數量。
接下來有一行,僅一個數字m(1 <= M <= N),表示求前多少名的學生。
最後一行為一個數字,表示Mr.Yang要求的最少做題數量。
輸出
對於每組測試資料,按名次列出前m名的學生姓名。

分析;

此題在做的時候,我因為未看到輸入0程式結束,所以導致錯了幾次。本題需注意的地方是,字典序是用升序排。

#include"stdio.h"
#include"string.h"
int main()
{
    int n,y[1001],z[1001],m,t,O;
    char a[1001][11],changeB[11],mid;
    int i,j,k,l,change;
    while(~scanf("%d",&n))
    {   if(n==0)
          break;
        l=n;
        while(n--)
        {   scanf("%c",&mid);
            scanf("%s",a[n]);
            scanf("%d%d",&y[n],&z[n]);

        }
        scanf("%d%d",&m,&t);
        for(i=0;i<l-1;i++)
            for(j=i;j<l;j++)
        {
            if(y[i]<y[j])
            {   change=z[i];
                z[i]=z[j];
                z[j]=change;
                change=y[i];
                y[i]=y[j];
                y[j]=change;
                strcpy(changeB,a[i]);
                strcpy(a[i],a[j]);
                strcpy(a[j],changeB);

            }
            if(y[i]==y[j]&&strcmp(a[i],a[j])>0)
            {   change=z[i];
                z[i]=z[j];
                z[j]=change;
                change=y[i];
                y[i]=y[j];
                y[j]=change;
                strcpy(changeB,a[i]);
                strcpy(a[i],a[j]);
                strcpy(a[j],changeB);

            }
        }
        for(i=0;i<m;i++)
        {
            if(z[i]>=t)
                printf("%s\n",a[i]);
            else
                m++;
        }
    }
}