zju2005排名_结构体

http://acm.hdu.edu.cn/showproblem.php?pid=1236

浙大计算机研究生复试上机考试-2005年

不要使用标记数组,while(x--)写的很巧妙

#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;

struct E
{
	char no[30];                //准考证号
    int score;                  //最终得分
};
E stu[1004];
bool cmp(E A,E B)
{
   if (A.score!=B.score)
   {
	   return A.score>B.score;
   }
   else 
	   return strcmp(A.no,B.no)<0;
}

int main()
{
	int n,m,g,i,k,x;                   //学生数n,考题数m,分数线g,解决题目数x
	int mark[15];                         //保存题目对应分值1~10道题目
	while (scanf("%d",&n)&& n!=0)
	{
		scanf("%d%d",&m,&g);             //题目总数,分数线
		for (i=1;i<=m;i++)
		{
			scanf("%d",&mark[i]);         //依次输入m道题目对应的分值
		}
		
		for(i=1;i<=n;i++)                 //n个学生成绩具体信息录入 
		{
			int s=0;                      //得分
			scanf("%s%d",stu[i].no,&x);   //编号no,做出题目数x
			while (x--)                   //做出x道,累加x次分数,巧妙地写法
			{
				scanf("%d",&k);
                s+=mark[k];
			}
			stu[i].score=s;                //保存在stu[i].score中
		}
		sort(stu+1,stu+1+n,cmp);           //学生1~n排序
		int ans=0;                         //ans保存过线人数
		for (i=1;i<=n;i++)
		{
			if (stu[i].score>=g)
			{
				ans++;
			}
		}
		printf("%d\n",ans);
		for (i=1;i<=n;i++)
		{
			if (stu[i].score>=g)
			{
				printf("%s %d\n",stu[i].no,stu[i].score);
			}
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值