1058 选择题(20 分)

批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。

输入格式:

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

输出格式:

按照输入的顺序给出每个学生的得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题的分数。最后一行输出错得最多的题目的错误次数和编号(题目按照输入的顺序从 1 开始编号)。如果有并列,则按编号递增顺序输出。数字间用空格分隔,行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出 Too simple

输入样例:

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) (2 b d) (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) (2 b c) (4 a b c d)

输出样例:

3
6
5
2 2 3 4

PS:

本题的输入有些繁琐,我用了一个结构体记录各题的数据,写代码的时候思路要清晰。难点在于如何判断对错。

注意:1、由于可能出现多个值并列,所以可以先找到最大值,然后再把与最大值相等的情况输出;

2、判断条件一定要完整,这里我的是(c(输出正确数)==本题正确选项(s[i].ny)==输入个数(k));

3、一般样例能过基本没问题,最后一个测试点有很多测试数据,如果出错,说明你之前的判断条件有误。

#include<iostream>
#include<string>
#include<cmath>
using namespace std;
struct number {
int mark;
int nc; //本题选项个数
int ny; //正确选项个数
int count = 0; //记录本题错误次数
int pd[100] = { 0 }; //int模拟bool确定正确选项
}s[101];
int main() {
int n, m, k, c, sum, flag;
char ch;
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> s[i].mark >> s[i].nc >> s[i].ny;
for (int j = 0; j < s[i].ny; j++) {
cin >> ch;
s[i].pd[ch - 'a'] = 1; //正确选项置1
}
}
for (int i = 0; i < n; i++) {
sum = 0;
for (int j = 0; j < m; j++) {
c = 0;
flag = 1;
cin >> ch >> k;
for (int h = 0; h < k; h++) {
cin >> ch;
if (s[j].pd[ch - 'a'] && flag) //C记录答对个数。
c++;
else
flag = 0; //关闭选项计数器
}
cin >> ch;
if (c == s[j].ny&&k == c) //保证c与本题正确选项相等,且输入个数也要与之相等
sum += s[j].mark;
else
s[j].count++; //答错时错误计数器+1;
}
cout << sum << endl;
}
int max = 0;
for (int i = 0; i < m; i++) { //找出最大值
max = s[i].count > max ? s[i].count : max;
}
if (max == 0) { //根据题意将max分情况讨论
cout << "Too simple";
}
else {
cout << max;
for (int i = 0; i < m; i++) {
if (s[i].count == max) //与最大值相等则输出
cout << " " << i + 1;
}
}
return 0;
}

PAT 1058 选择题(20)(代码+思路)的更多相关文章

  1. PAT 1058. 选择题(20)

    批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多. 输入格式: 输入在第一行给出两个正整数N(<=1000)和M(<=100),分别是学生人数和多 ...

  2. PAT——1058. 选择题

    批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多. 输入格式: 输入在第一行给出两个正整数N(<=1000)和M(<=100),分别是学生人数和多 ...

  3. PAT 1058 选择题

    https://pintia.cn/problem-sets/994805260223102976/problems/994805270356541440 批改多选题是比较麻烦的事情,本题就请你写个程 ...

  4. 1058 选择题 (20 分)C语言

    批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多. 输入格式: 输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 100),分别是学生人数和多选题的个 ...

  5. java注意事项演示 地图产生表 演示样本 来自thinking in java 4 20代码的章

    java注意事项演示 地图产生表 演示样本  来自thinking in java 4 20代码的章 thinking in java 4免费下载:http://download.csdn.net/d ...

  6. 1001.A+B Format (20)代码自查(补足版)

    1001.A+B Format (20)代码自查(补足版) 谢谢畅畅酱的提醒,发现了代码中的不足,把变量名更改成更合理的名字,并且把注释也换成英文啦! 栋哥提供的代码自查的方式也帮助了我发现很多代码中 ...

  7. golang动态加载原生代码思路

    golang动态加载原生代码思路(非plugin,非so文件.使用mmap形式运行机器码,可释放) 1.用go tool objdump,可以看到任意函数的机器码.汇编指令.偏移.(go源码下面有一个 ...

  8. wpa2破解代码思路(教你写poc)

    前言:此篇关于1.wpa2协议漏洞的产生原因:2.scapy这个数据包库的基础:3.最后讲解代码思路,让你们从伪代码可以直接写成代码展开介绍分享~ 本文作者:i春秋签约作家——kaikaix 1.大家 ...

  9. 目标跟踪系列十一:Exploiting the Circulant Structure of Tracking-by-detection with Kernels代码思路

    Tracking学习系列原创,转载标明出处: http://blog.csdn.net/ikerpeng/article/details/40144497 这篇文章非常赞啊!非常有必要将其好好的学习, ...

随机推荐

  1. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap

    HACK #15 ramzswap 本节介绍将一部分内存作为交换设备使用的ramzswap.ramzswap是将一部分内存空间作为交换设备使用的基于RAM的块设备.对要换出(swapout)的页面进行 ...

  2. rhel7配置ELK过程

    参考网站:https://www.cnblogs.com/hongdada/p/7887455.html https://my.oschina.net/codingcloud/blog/1615013 ...

  3. 使用SendMessage进行进程间通信

    Imports System.Runtime.InteropServices Public Class Monitor <DllImport("user32.dll", Ch ...

  4. Mysql 索引优化 - 2

    永远小表驱动大表(小数据驱动大数据) in exists区别, SELECT * FROM A WHERE A.id in (SELECT id FORM B) 若A表数据大于B表数据用in SELE ...

  5. LInux下LD_LIBRARY_PATH的作用与设置

    LD_LIBRARY_PATH环境变量主要是用于指定动态链接器(Id)超早elf可执行文件运行时所依赖的动态库(so)的路径,其内容是以冒号分隔的路径列表. Id链接器优先在该变量设置的路径中查找,若 ...

  6. Qt 信号槽

    Qt4与Qt5的信号槽有些不同: 1. Qt4的槽函数必须使用slots关键字声明,而Qt5中已经不再需要了,槽函数可以是任何能和信号关联的成员函数. 2. Qt4指定信号函数和槽函数需用SIGNAL ...

  7. 关于gevent的一些理解(二)

    3 实际应用 1 zeromq和gevent: zeromq的介绍请参看:http://www.infoq.com/cn/news/2010/09/introduction-zero-mq 假设你已经 ...

  8. JAR命令使用

    jar 命令详解 jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe,Linux 下文件名为 jar.它的运行需要用到 JDK 安装目录 ...

  9. v​n​c​服​务​​安​装​与配置

    一.Redhat上VNC Server配置 本文以当前Linux系统未安装VNC服务器为基本,如果已安装请跳过第1节! 前提: 1.安装 TigerVNC Server # yum search ti ...

  10. 使用通用mapper 生成代码

    参考通用mapper 文档:https://github.com/abel533/Mapper/wiki/4.1.mappergenerator 使用maven 的方法: 1,修改pom.xml &l ...