批改多选题是比较麻烦的事情,有很多不同的计分方法。有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数;如果考生选择了任何一个错误的选项,则不能得分。本题就请你写个程序帮助老师批改多选题,并且指出哪道题的哪个选项错的人最多。

输入格式:

输入在第一行给出两个正整数 N(≤1000)和 M(≤100),分别是学生人数和多选题的个数。随后 M 行,每行顺次给出一道题的满分值(不超过 5 的正整数)、选项个数(不少于 2 且不超过 5 的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母 a 开始顺次排列。各项间以 1 个空格分隔。最后 N 行,每行给出一个学生的答题情况,其每题答案格式为 (选中的选项个数 选项1 ……),按题目顺序给出。注意:题目保证学生的答题情况是合法的,即不存在选中的选项数超过实际选项数的情况。

输出格式:

按照输入的顺序给出每个学生的得分,每个分数占一行,输出小数点后 1 位。最后输出错得最多的题目选项的信息,格式为:错误次数 题目编号(题目按照输入的顺序从1开始编号)-选项号。如果有并列,则每行一个选项,按题目编号递增顺序输出;再并列则按选项号递增顺序输出。行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出 Too simple。

输入样例 1:

3 4
3 4 2 a c
2 5 1 b
5 3 2 b c
1 5 4 a b d e
(2 a c) (3 b d e) (2 a c) (3 a b e)
(2 a c) (1 b) (2 a b) (4 a b d e)
(2 b d) (1 e) (1 c) (4 a b c d)

输出样例 1:

3.5
6.0
2.5
2 2-e
2 3-a
2 3-b

输入样例 2:

2 2
3 4 2 a c
2 5 1 b
(2 a c) (1 b)
(2 a c) (1 b)

输出样例 2:

5.0
5.0
Too simple

这道题自己根据1058写出来有80行,结果报错,改了很久,结果……最后,参考了别人家的代码,如果考试的话,这道题我会放弃她。

#include <stdio.h>
typedef struct {
int score;
int xuan;
int zheng;
// 正确答案,1表示有 0没有,如10000, 表示答案是a
int answers[5];
} Arr;
int main() {
int N, M,m,i,j,k;
scanf("%d %d", &N, &M);
Arr arr[M];
int wore[M][5];
int max = 0;
double score[N];
for (i = 0; i < M; i++) {
for (j = 0; j < 5; j++) {
//每个答案选项错误次数归零
wore[i][j] = 0;
//正确答案选项归零
arr[i].answers[j] = 0;
}
}
for (i = 0; i < M; i++) {
scanf("%d %d %d", &arr[i].score, &arr[i].xuan, &arr[i].zheng);
// 记录题目答案
char c;
for (j = 0; j < arr[i].zheng; j++) {
// 要匹配前面的空格,否则获取出错
scanf(" %c", &c);
arr[i].answers[c - 'a'] = 1;
}
}
// 遍历学生和答题情况
getchar();
for (k = 0; k < N; k++) {
score[k] = 0;
int index = 0;
int ch;
char c;
while ((ch = getchar()) != '\n') {
if (ch == '(') {
int que[5] = {0};
int doc;
//是否正确,漏选也算正确
int god = 1;
// 是否全部正确
int numh = 1;
scanf("%d", &doc);
for (j = 0; j < doc; j++) {
scanf(" %c", &c);
que[c - 'a'] = 1;
}
for (i = 0; i < 5; i++) {
// 错选了,答案没有,但却选了
if (que[i] == 1 && arr[index].answers[i] == 0) {
god = 0;
wore[index][i]++;
} else if (que[i] == 0 && arr[index].answers[i] == 1) {
// 漏选了,答案有,但却没有选
numh = 0;
wore[index][i]++;
}
if (max < wore[index][i]) {
max = wore[index][i];
}
}
if (god) {
if (numh) {
score[k] += arr[index].score;
} else {
score[k] += arr[index].score * 0.5;
}
}
index++;
}
}
printf("%.1lf\n", score[k]);
}
if (max == 0) {
printf("Too simple");
return 0;
}
for (m = 0; m < M; m++) {
for (i = 0; i < 5; i++) {
if (wore[m][i] == max) {
printf("%d %d-%c\n", max, m + 1, i + 'a');
}
}
}
return 0;
}

1073 多选题常见计分法 (20分)C语言的更多相关文章

  1. PAT——1073. 多选题常见计分法(20)

    批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到50%分数:如果考生选择了任何一个错误的选项,则不能得分.本题就 ...

  2. PAT 1073 多选题常见计分法(20)(代码+思路)

    1073 多选题常见计分法(20 分) 批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生 ...

  3. PAT Basic 1073. 多选题常见计分法

    题目内容 多选题常见计分法(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 批改多选题是比较麻烦的事情,有 ...

  4. PAT 1073. 多选题常见计分法

    PAT 1073. 多选题常见计分法 批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到50%分数:如果考生选择了 ...

  5. PAT 1073 多选题常见计分法 (20 分)

    批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生选择了任何一个错误的选项,则不能得分.本 ...

  6. P1073 多选题常见计分法

    P1073 多选题常见计分法 转跳点:

  7. 【PAT】B1073 多选题常见计分法(20 分)

    此处为我的存储结构,只提供一种思路,二维数组存储所有数据 #include<stdio.h> #include<string.h> #include<map> #i ...

  8. PAT Basic 1024 科学计数法 (20 分) Advanced 1073 Scientific Notation (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

  9. 1024 科学计数法 (20 分)C与Java

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部 ...

随机推荐

  1. 模板—e-dcc缩点

    int dfn[MAXN],low[MAXN],cnt; bool isbridge[MAXN]; void tarjan(int x,int edg) { low[x]=dfn[x]=++cnt; ...

  2. pytorch JIT浅解析

    概要  Torch Script中的核心数据结构是ScriptModule. 它是Torch的nn.Module的类似物,代表整个模型作为子模块树. 与普通模块一样,ScriptModule中的每个单 ...

  3. 提高github下载速度的方法【100%有效】可达到2MB/s

    因为大家都知道的原因,在国内从github上面下载代码的速度峰值通常都是20kB/s.这种速度对于那些小项目还好,而对于大一些的并且带有很多子模块的项目来讲就跟耽误时间.而常见的的方法无非就是修改HO ...

  4. mysql多表连接和子查询

    文章实例的数据表,来自上一篇博客<mysql简单查询>:http://blog.csdn.net/zuiwuyuan/article/details/39349611 MYSQL的多表连接 ...

  5. gyp verb check python checking for Python executable "python2" in the PATH

    缺少python2.7支持 可快速使用以下语句完成安装 npm install --global --production windows-build-tools 到时候会自动下载python的 如果 ...

  6. Linux下的实用工具——计算器bc

    Linux下的实用工具——计算器   1. bc指令算加法,如图: 4. bc指令算除法(进阶),如图示,10/3之所以为3,是因为我们没有指定小数点后取几位,默认取到整数部分:而10/100之所以为 ...

  7. [C++] 检查随机内存溢出

    C++程序的随机内存溢出是非常难处理的,windows提供了一些工具来缓解这个问题. windows debuger提供的Global Flags可以设置"enable heap tail ...

  8. js 操作字符串方法记录

    var str="helloworld"; 这三个方法如果只传一个参数默认截取到最后..将截取的字符返回,对原字符串没有任何改变 slice(star,end)//从索引star开 ...

  9. get_free_page 和其友

    如果一个模块需要分配大块的内存, 它常常最好是使用一个面向页的技术. 请求整个页也 有其他的优点, 这个在 15 章介绍. 为分配页, 下列函数可用: get_zeroed_page(unsigned ...

  10. ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统(7)

    今天将使用Simplemembership进行权限控制 我们使用mvc的AuthorizeAttribute来实现对Controller and Action权限控制 看如下标为红色的代码片段: // ...