1015
来源:互联网 发布:java数组编程 编辑:程序博客网 时间:2024/06/05 08:29
这是一道简答题,用qsort函数很容易就能搞定,qsort的第二个参数多少个元素参与排序,一定不要写错了。还有就是记得初始化,如果不初始化用qsort函数很容易产生错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
char id[30];
int count;
int ques[20];
int grade;
}stu[1010];
int point[1010];
int cnt;
int comp(const void *a, const void *b)
{
int res;
struct student *p = (struct student *)a;
struct student *q = (struct student *)b;
if ((p->grade) == (q->grade)) {//如果成绩一样,按照名字的字母表排序
res = strcmp(p->id, q->id);
return res;
} return q->grade - p->grade;
}
int init()//初始化
{
int i;
cnt = 0;
for (i = 0; i < 1010; i++) {
stu[i].grade = 0;
stu[i].count = 0;
memset(stu[i].id, 0, 30);
memset(stu[i].ques, 0, 20);
}
return 0;
}
int main()
{
int n, m, g, i, j;
while (scanf("%d", &n), n) {
scanf("%d%d", &m, &g);
init();
for (i = 1; i <=m; i++) {
scanf("%d", &point[i]);
}
for (i = 0; i < n; i++) {
scanf("%s", stu[i].id);
scanf("%d", &stu[i].count);
for (j = 0; j < stu[i].count; j++) {
scanf("%d", &stu[i].ques[j]);
}
for (j = 0; j < stu[i].count; j++) {
stu[i].grade += point[stu[i].ques[j]];
}
if (stu[i].grade >= g) cnt++;
}
qsort(stu, n, sizeof(struct student), comp);
printf("%d\n", cnt);
for (i = 0; i < cnt; i++) {
printf("%s %d\n", stu[i].id, stu[i].grade);
}
}
return 0;
}
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 1015
- 2013腾讯编程马拉松赛初赛题目(小Q系列故事——屌丝的逆袭)
- winform窗体 一段时间鼠标键盘无操作
- 嵌入式书籍推荐(按学习的顺序)
- 网上支付平台PHP版本
- 怎样获得任意窗口所在的进程路径?
- 1015
- Linux-iptables配置-防火墙配置
- 单片机数码管时钟显示
- kernel32基地址获得学习笔记
- ACM算法题——快捷键的难题
- MySQL存入时间只有年月日
- Python文件基本操作
- uva 11151 Longest Palindrome(LCS)
- 同步和异步的区别