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

批改多选题是比较麻烦的事情,有很多不同的计分方法。有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 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
//分数 vector<int> total(m),正确选项 trueOpt[m]
//每道题的选项 vector<vector<int>> cnt<m,vector<in>(5)) 漏选或者错选项次数
//option[1100][110] 学生选的答案 
#include<iostream>
#include<vector>
#include<set>
using namespace std;int main(){int n,m;int numOption,numRight;int hash[] = {1,2,4,8,16},optStu[1100][110] = {0};//数组声明不能放在外面??编译错误char c;    scanf("%d%d",&n,&m);vector<int> full_score(m),trueOption(m);vector<vector<int> > wrongCnt(m,vector<int>(5));//输入题目信息和正确答案 for(int i = 0; i < m; i++){scanf("%d%d%d",&full_score[i],&numOption,&numRight);for(int j = 0; j < numRight; j++){//char c;scanf(" %c",&c);trueOption[i] += hash[c - 'a'];}}    //输入学生选择信息int temp;for(int i = 0; i < n; i++){double score = 0;for(int j = 0; j < m; j++){getchar();scanf("(%d",&temp);for(int k = 0; k < temp; k++){ //输入ith学生对于 jth道题的选择 scanf(" %c)",&c);optStu[i][j] += hash[c - 'a'];}int el = optStu[i][j] ^  trueOption[j];if(el){  //如果异或结果不为0,意味着有错选或者漏选的情况 //异或的结果与正确答案或运算可以求出哪个和正确结果不相同 if((optStu[i][j] | trueOption[j]) == trueOption[j]){score += full_score[j] * 1.0 / 2;}if(el){ //将错选的选项的每一项都要统计,无论这个单项选项是否是正确的单项 for(int k = 0; k < 5; k++)if(el & hash[k]) wrongCnt[j][k]++;}}else{score += full_score[j];}}printf("%.1f\n",score);} //寻找错误最多的选项int maxcnt = 0;for(int i = 0; i < m; i++){for(int j = 0; j < 5; j++)maxcnt = maxcnt > wrongCnt[i][j] ? maxcnt : wrongCnt[i][j];} if(maxcnt == 0) printf("Too simple\n");else{for(int i = 0; i < m; i++){for(int j = 0; j < wrongCnt[i].size(); j++){if(maxcnt == wrongCnt[i][j])printf("%d %d-%c\n",maxcnt,i+1,'a'+j);}}}return 0;
}

 

转载于:https://www.cnblogs.com/wanghao-boke/p/10421139.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《二叉树》目录

序号题目标记 1 94. 二叉树的中序遍历 2 98. 验证二叉搜索树 3100. 相同的树 4101. 对称二叉树 5 102. 二叉树的层次遍历 6 103. 二叉树的锯齿形层次遍历 7104. 二叉树的最大深度 8 105. 从前序与中序遍历序列构造二叉树 9106. 从中序与后序遍历序列构造二叉树 10107. 二叉…

1075 链表元素分类 (25 分)

给定一个单链表&#xff0c;请编写程序将链表元素进行分类排列&#xff0c;使得所有负值元素都排在非负值元素的前面&#xff0c;而 [0, K] 区间内的元素都排在大于 K 的元素前面。但每一类内部元素的顺序是不能改变的。例如&#xff1a;给定链表为 18→7→-4→0→5→-6→10→1…

C++ 面试(一)

1. 编译器什么情况下&#xff0c;合成构造函数&#xff1f;[点击链接(一)] 编译器什么情况下&#xff0c;合成构造函数&#xff1f;

1074 宇宙无敌加法器 (20 分)

地球人习惯使用十进制数&#xff0c;并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里&#xff0c;每个数字的每一位都是不同进制的&#xff0c;这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表&#xff0c;例如“……0527”就表示最低…

九大经典算法之选择排序、堆排序

05 选择排序 &#xff08;Selection Sort&#xff09; 原理&#xff1a;每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;大&#xff…

九大经典算法之归并排序

07 归并排序 &#xff08;Merge Sort&#xff09; 归并操作的工作原理如下&#xff1a;第一步&#xff1a;申请空间&#xff0c;使其大小为两个已经排序序列之和&#xff0c;该空间用来存放合并后的序列&#xff1b;第二步&#xff1a;设定两个指针&#xff0c;最初位置分别为两…

长连接和Keepalive详解

客户端主机依旧活跃&#xff08;up&#xff09;运行&#xff0c;并且从服务器可到达。从客户端TCP的正常响应&#xff0c;服务器知道对方仍然活跃。服务器的TCP为接下来的两小时复位存活定时器&#xff0c;如果在这两个小时到期之前&#xff0c;连接上发生应用程序的通信&#…

九大经典算法之基数排序、桶排序

08 基数排序&#xff08;Radix Sort&#xff09; 基数排序是一种非比较型整数排序算法&#xff0c;其原理是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。排序过程是将所有待比较数值统一为同样的数位长度&#xff0c;数位较短的数前面补零&#xff0c;然…

非阻塞connect

在 socket 是阻塞模式下 connect 函数会一直到有明确的结果才会返回&#xff08;或连接成功或连接失败&#xff09;&#xff0c;如果服务器地址“较远”&#xff0c;连接速度比较慢&#xff0c;connect 函数在连接过程中可能会导致程序阻塞在 connect 函数处好一会儿&#xff0…

1076 Wifi密码 (15 分)

下面是微博上流传的一张照片&#xff1a;“各位亲爱的同学们&#xff0c;鉴于大家有时需要使用 wifi&#xff0c;又怕耽误亲们的学习&#xff0c;现将 wifi 密码设置为下列数学题答案&#xff1a;A-1&#xff1b;B-2&#xff1b;C-3&#xff1b;D-4&#xff1b;请同学们自己作答…

和为S的连续正数序列

题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能…

1077 互评成绩计算 (20 分)

在浙大的计算机专业课中&#xff0c;经常有互评分组报告这个环节。一个组上台介绍自己的工作&#xff0c;其他组在台下为其表现评分。最后这个组的互评成绩是这样计算的&#xff1a;所有其他组的评分中&#xff0c;去掉一个最高分和一个最低分&#xff0c;剩下的分数取平均分记…

1080 MOOC期终成绩 (25 分)

对于在中国大学MOOC&#xff08;http://www.icourse163.org/ &#xff09;学习“数据结构”课程的学生&#xff0c;想要获得一张合格证书&#xff0c;必须首先获得不少于200分的在线编程作业分&#xff0c;然后总评获得不少于60分&#xff08;满分100&#xff09;。总评成绩的计…

1078 字符串压缩与解压 (20 分)

文本压缩有很多种方法&#xff0c;这里我们只考虑最简单的一种&#xff1a;把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复&#xff0c;就原样输出。例如 aba 压缩后仍然是 aba。 解压方法就是反过…

120. 三角形最小路径和

给定一个三角形&#xff0c;找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如&#xff0c;给定三角形&#xff1a; [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11&#xff08;即&#xff0c;2 3 5 1 11&#xff09;…

1079 延迟的回文数 (20 分)

给定一个 k1 位的正整数 N&#xff0c;写成 a​k​​⋯a​1​​a​0​​ 的形式&#xff0c;其中对所有 i 有 0≤a​i​​<10 且 a​k​​>0。N 被称为一个回文数&#xff0c;当且仅当对所有 i 有 a​i​​a​k−i​​。零也被定义为一个回文数。 非回文数也可以通过一系…

1081 检查密码 (15 分)

本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成&#xff0c;并且只能有英文字母、数字和小数点 .&#xff0c;还必须既有字母也有数字。 输入格式&#xff1a; 输入第一行给出一个正整数 N&#xff08;≤ …

1082 射击比赛 (20 分)

本题目给出的射击比赛的规则非常简单&#xff0c;谁打的弹洞距离靶心最近&#xff0c;谁就是冠军&#xff1b;谁差得最远&#xff0c;谁就是菜鸟。本题给出一系列弹洞的平面坐标(x,y)&#xff0c;请你编写程序找出冠军和菜鸟。我们假设靶心在原点(0,0)。 输入格式&#xff1a; …

LRU缓存机制

运用你所掌握的数据结构&#xff0c;设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作&#xff1a; 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果密钥 (key) 存在于缓存中&#xff0c;则获取密钥的值&#xff08;总是正数&#xff09;&#xff…

1083 是否存在相等的差 (20 分)

给定 N 张卡片&#xff0c;正面分别写上 1、2、……、N&#xff0c;然后全部翻面&#xff0c;洗牌&#xff0c;在背面分别写上 1、2、……、N。将每张牌的正反两面数字相减&#xff08;大减小&#xff09;&#xff0c;得到 N 个非负差值&#xff0c;其中是否存在相等的差&#…