[PAT Basic Level]1004

Topic analysis

Water problems, according to questions asked on track to write code. To avoid wasting space, you can dynamically allocate memory based on input conditions. Also note that name, student number no more than 10 characters in space but in the words of the char array or to open 11 elements can be inserted to ensure that the final '\ 0'.

Source

#include <stdio.h>

int main()
{
    int stuNumber;
    scanf("%d",&stuNumber);
  
    int minScore=101,maxScore=-1;   //效成绩为0至100,确保会修改到学生实际成绩
    int minOrder,maxOrder;  //记录最高、最低成绩对应学生序号
    char **name=new char* [stuNumber];
    char **id=new char* [stuNumber];
    int *grades=new int [stuNumber];
    for(int i=0;i<stuNumber;++i){
        name[i]=new char[11];   //每个学生姓名至多10字符,外加一个\0
        id[i]=new char[11];
    }

    for(int i=0;i<stuNumber;++i){
        getchar();   //读取上一行的换行符
        int j=0;
        while((name[i][j++]=getchar())!=' ')
        ;
        name[i][j-1]='\0';
        j=0;  //重置为0
        while((id[i][j++]=getchar())!=' ')
        ;
        id[i][j-1]='\0';
        scanf("%d",&grades[i]);
        if(maxScore<grades[i]){   //记录成绩最高者
            maxScore=grades[i];
            maxOrder=i;
        }
        if(minScore>grades[i]){   //记录成绩最低者
            minScore=grades[i];
            minOrder=i;
        }
    }
    printf("%s %s\n",name[maxOrder],id[maxOrder]);
    printf("%s %s",name[minOrder],id[minOrder]);
    for(int i=0;i<stuNumber;++i){
        delete []name[i];
        delete []id[i];
    }
    delete []name;
    delete []id;
    delete []grades;
    return 0;

}
Published 11 original articles · won praise 1 · views 75

Guess you like

Origin blog.csdn.net/weixin_44452361/article/details/104602563