2012-12-1多校联考题 保送

来源:互联网 发布:linux自启动shell脚本 编辑:程序博客网 时间:2024/04/29 09:51

保送
Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 72   Accepted Submission(s) : 24

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

很多同学却非常关心自己的绩点分排名。因为学校有个政策,凡是绩点分排名在前35%(取人数时进行四合五入)就具备保研的资格。现在任给你一个学生的姓名,你能确定他是否具有保送资格吗?
有多组测试数据,每组第一行先输入n(10<=n<=100),表示这专业有n个学生。紧接着的n行,每一行包含一个姓名(姓名为一串连续的小写字母不含空格,长度最长为10,保证没有相同的姓名)和一个绩点分(且互不相等)。姓名和绩点分之间用空格隔开。然后下一行输入一个数r(r<=10),紧接着的r行,每行输入上面生中的任一个姓名。若这个学生能保送,则输出他的排名。否则输出No。(排名从1开始计数)。

Sample Input

10zhangsan 98.00lisi 99.00 wangwu 89.00 dasan 88.00 xiaosi 78.00 liuliu 79.00 hhah 77.00 jisd 64.00 ming 72.00 da 45.005wangwujisddasanliuliuzhangsan

Sample Output

3No4No2______________________________________________________PS.注意精度处理
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{char name[15];double m;}men;int cmp(const void *a,const void*b){return (*(men *)b).m-(*(men *)a).m;}men ren[101];int main(){int n,n2;int i,j;char name2[15];int total,renshu;while(~scanf("%d",&n)){total=0;for(i=0;i<n;i++){scanf("%s%lf",ren[i].name,&ren[i].m);total=total+ren[i].m;}renshu=(float)((n)*0.35+0.5);qsort(ren,n,sizeof(ren[0]),cmp);scanf("%d",&n2);for(i=0;i<n2;i++){scanf("%s",name2);for(j=0;j<n;j++){if(strcmp(name2,ren[j].name)==0){if(j<renshu)printf("%d\n",j+1);elseprintf("No\n");}}}}}
原创粉丝点击