您的位置:首页 > 其它

1083. List Grades (25)

2015-11-29 18:02 459 查看
Given a list of N student records with name, ID and grade. You are supposed to sort the records with respect to the grade in non-increasing order, and output those student records of which the grades are in a given interval.

Input Specification:

Each input file contains one test case. Each case is given in the following format:
N
name[1] ID[1] grade[1]
name[2] ID[2] grade[2]
... ...
name
ID
grade

grade1 grade2


where name[i] and ID[i] are strings of no more than 10 characters with no space, grade[i] is an integer in [0, 100], grade1 and grade2 are the boundaries of the grade's interval. It is guaranteed that all the grades are distinct.

Output Specification:

For each test case you should output the student records of which the grades are in the given interval [grade1, grade2] and are in non-increasing order. Each student record occupies a line with the student's name and ID, separated by one space. If there is
no student's grade in that interval, output "NONE" instead.
Sample Input 1:
4
Tom CS000001 59
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
60 100

Sample Output 1:
Mike CS991301
Mary EE990830
Joe Math990112

Sample Input 2:
2
Jean AA980920 60
Ann CS01 80
90 95

Sample Output 2:
NONE

----------------------华丽的分割线---------------------
分析:这题输入量不大,难度也不大。排序后搜索确定下标即可。
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>

#define Maxn 102

typedef struct
{
char name[11];
char ID[11];
int grade;
}Student;

int N;
Student input[Maxn];

int cmpgrade(const void *a,const void *b);

int main(void)
{
int grade1,grade2;
scanf("%d\n",&N);
int i;
for(i=0;i<N;++i)
{
scanf("%s %s %d\n",input[i].name,input[i].ID,&input[i].grade);
}
scanf("%d %d",&grade1,&grade2);

qsort(input,N,sizeof(input[0]),cmpgrade);

int index1 = -1;
int index2 = N;

for(i=0;i<N;++i)
{
if(input[i].grade <= grade2)
{
index2 = i;
break;
}
}

for(i=N-1;i>=0;i--)
{
if(input[i].grade >= grade1)
{
index1 = i;
break;
}
}

if(index2>index1)
printf("NONE\n");
else
{
for(i=index2;i<=index1;++i)
{
printf("%s %s\n",input[i].name,input[i].ID);
}
}

system("pause");
return 0;
}

int cmpgrade(const void *a,const void *b)
{
Student tempa = *(Student *)a;
Student tempb = *(Student *)b;
return tempb.grade - tempa.grade;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: