博客
关于我
PAT——1073. 多选题常见计分法(20)
阅读量:469 次
发布时间:2019-03-06

本文共 3811 字,大约阅读时间需要 12 分钟。

多选题批改系统

系统概述

本系统旨在帮助教师高效批改多选题,并统计学生对各题目选项的错误情况。系统支持以下评分规则:若学生选择了部分正确选项且未选择任何错误选项,则授予50%分数;若学生选择了任何错误选项,则不得分。

输入格式说明

  • 第一行:输入两个正整数 NM,分别表示学生人数和多选题的个数。
  • 接下来的 M:每行代表一道多选题,格式如下:
    • 第一个数字:题目的满分值(不超过5的正整数)。
    • 第二个数字:选项总数(2到5之间的正整数)。
    • 第三个数字:正确选项的数量(不超过选项总数)。
    • 结尾部分:列出所有正确选项,用小写字母表示,例如 a c 表示选项a和c正确。
  • 接下来的 N:每行表示一个学生的答题情况,格式为 (选中选项个数 选项1 …),按题目顺序排列。
  • 系统功能

  • 评分逻辑
    • 若学生的答题与正确答案完全一致,授予满分。
    • 若学生部分正确但未选择错误选项,授予50%分。
    • 若学生选择了任何错误选项,则不得分。
  • 错误统计
    • 记录每道题每个选项被错误选择的次数。
    • 最后输出错得最多的题目选项信息,按题目编号和选项号排序。
  • 代码实现细节

  • 数据结构
    • problem 类存储每道题的满分、选项总数、正确选项数量及正确选项字符串。
    • wrong 数组记录每道题每选项的错误次数。
  • 读取输入
    • 首先读取 NM
    • 逐行读取每道题的数据,并存储在 problem 数组中。
  • 评分计算
    • 对每个学生的答题情况进行逐题评分。
    • 检查答题是否与正确答案完全一致。
    • 计算部分正确但未选错误选项的情况。
  • 错误统计
    • 对每道题的每个选项,统计学生答错的次数。
    • 记录最多错误次数及对应的题目编号和选项。
  • 输出结果

  • 学生得分
    • 按照输入顺序输出每位学生的总得分,保留一位小数。
  • 错误统计
    • 若所有题目无错误,输出 Too simple
    • 否则,按题目编号和选项号排序,输出错误次数及对应信息。
  • 代码示例

    以下是代码的核心逻辑示例:

    public class basicalLevel1073MultipleChoiceCount {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int n = in.nextInt();        int m = in.nextInt();        problem[] pArr = new problem[m];        int[][] wrong = new int[m][5];        int max = -1;        for (int i = 0; i < m; i++) {            problem p = new problem();            p.score = in.nextInt();            p.optionNum = in.nextInt();            p.rightNum = in.nextInt();            p.rightAns = "";            for (int j = 0; j < p.rightNum; j++) {                p.rightAns += in.next();            }            pArr[i] = p;        }        for (int i = 0; i < n; i++) {            double score = 0;            for (int j = 0; j < m; j++) {                String miss = in.next();                int k = miss.charAt(1) - '0';                String personAns = "";                for (int k2 = 0; k2 < k - 1; k2++) {                    personAns += in.next();                }                personAns += in.next().charAt(0);                if (personAns.equals(pArr[j].rightAns)) {                    score += pArr[j].score;                } else {                    int l = 0;                    for (l = 0; l < personAns.length(); l++) {                        if (!pArr[j].rightAns.contains(personAns.substring(l, l + 1))) {                            wrong[j][personAns.charAt(l) - 'a']++;                            if (wrong[j][personAns.charAt(l) - 'a'] > max) {                                max = wrong[j][personAns.charAt(l) - 'a'];                            }                        }                    }                    int l2 = 0;                    for (l2 = 0; l2 < pArr[j].rightAns.length(); l2++) {                        if (!personAns.contains(pArr[j].rightAns.substring(l2, l2 + 1))) {                            wrong[j][pArr[j].rightAns.charAt(l2) - 'a']++;                            if (wrong[j][pArr[j].rightAns.charAt(l2) - 'a'] > max) {                                max = wrong[j][pArr[j].rightAns.charAt(l2) - 'a'];                            }                        }                    }                    if (flag == 1) {                        score += pArr[j].score / 2.0;                    }                }            }            System.out.printf("%.1f\n", score);        }        if (max == -1) {            System.out.println("Too simple");        } else {            for (int o = 0; o < m; o++) {                for (int o2 = 0; o2 < 5; o2++) {                    if (wrong[o][o2] == max) {                        System.out.printf("%d %d-%c\n", max, o + 1, o2 + 'a');                    }                }            }        }    }}class problem {    int score;    int optionNum;    int rightNum;    String rightAns;}

    代码说明

    • 输入处理:读取学生人数和多选题数,逐行读取每道题的数据并存储。
    • 评分逻辑:逐个评估学生的答题情况,计算得分并统计错误选项。
    • 错误统计:记录每道题每选项的错误次数,最后按要求输出结果。

    输出结果示例

    输入样例1的输出结果如下:

    3.56.02.52 2-e2 3-a2 3-b

    输入样例2的输出结果如下:

    5.05.0Too simple

    希望这段文字能够清晰地传达多选题批改系统的功能和实现方法,同时满足技术写作的要求。

    转载地址:http://lnnbz.baihongyu.com/

    你可能感兴趣的文章
    PLC通讯方式
    查看>>
    Please install 'webpack-cli' in addition to webpack itself to use the CLI
    查看>>
    Ploly Dash,更新一个Dash应用程序JJJA上的实时人物
    查看>>
    Ploly烛台的定制颜色
    查看>>
    Ploly:如何在Excel中嵌入完全交互的Ploly图形?
    查看>>
    plotloss记录
    查看>>
    Plotly (Python) 子图:填充构面和共享图例
    查看>>
    Plotly 中的行悬停文本
    查看>>
    Plotly 停用 x 轴排序
    查看>>
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>