博客
关于我
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/

    你可能感兴趣的文章
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    nmap 使用方法详细介绍
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    nmap指纹识别要点以及又快又准之方法
    查看>>
    Nmap渗透测试指南之指纹识别与探测、伺机而动
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    nmon_x86_64_centos7工具如何使用
    查看>>
    NN&DL4.1 Deep L-layer neural network简介
    查看>>
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.7 Parameters vs Hyperparameters
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    nnU-Net 终极指南
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>