• PTA 乙级 1058 选择题 (20分) C++


     题目输入和输出比较繁琐,说一下思路

    思路:

    • 建立一个题目信息的结构体,包含题目满分,选项个数,正确选项个数。正确选项字母,之后分别输入(所有题目信息统计完成)
    • 两层循环,第一层是学生数,第二层是题目数,题中有具体学生选项输入格式(选中的选项个数,选项1...)且每个题用空格隔开,利用一个特定的输入格式即可实现输入      
      1 int r = 0;                                    //学生选中选项个数
      2 char w[5] = { '' }, c;                    //注意在topic的结构体中,char word[5]默认初始化为'',保持空位一致
      3 while ((c = getchar()) != ')') {            //在1052卖个萌中用到过这种输入方法,实现按规定格式的输入
      4     if (c == '(') {
      5         cin >> r;
      6         for (int k = 0; k < r; ++k)cin >> w[k];
      7     }
      8 }
    • 利用<cstring>中的strcmp实现学生选项和正确选项的比较,正确即学生所得分数增加,错误即本题错误数增加
    • 遍历每个题的错误次数,找到最高错误数

    • 输出每个学生的得分后,若最高错误数为0,则输出“Too simple”,否则,输出最高错误数,和与最高错误数错误数相同的编号(注意编号是从1算起的,需要在数组角标基础上再加1)
     1 #include<iostream>
     2 #include<vector>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 struct text {
     8     /*满分*/
     9     int full;
    10     /*选项个数*/
    11     int num;
    12     /*正确选项个数*/
    13     int right;
    14     /*正确选项字母*/
    15     char word[5];
    16 };
    17 
    18 int main() {
    19     /*N,M*/
    20     int n = 0, m = 0;
    21     cin >> n >> m;
    22     /*题目*/
    23     vector<text> topic(m);
    24     /*学生得分*/
    25     vector<int> stur(n);
    26     /*每个题错的次数*/
    27     vector<int> wrong(m);
    28     //有关题目信息的输入
    29     for (int i = 0; i < m; ++i) {
    30         cin >> topic[i].full >> topic[i].num >> topic[i].right;
    31         for (int j = 0; j < topic[i].right; ++j)cin >> topic[i].word[j];
    32     }
    33     for (int i = 0; i < n; ++i) {
    34         for (int j = 0; j < m; ++j) {
    35             int r = 0;                                    //学生选中选项个数
    36             char w[5] = { '' }, c;                    //注意在topic的结构体中,char word[5]默认初始化为'',保持空位一致
    37             while ((c = getchar()) != ')') {            //在1052卖个萌中用到过这种输入方法,实现按规定格式的输入
    38                 if (c == '(') {
    39                     cin >> r;
    40                     for (int k = 0; k < r; ++k)cin >> w[k];
    41                 }
    42             }
    43             if (r == topic[j].right && strcmp(topic[j].word, w) == 0) stur[i] += topic[j].full;    //正确
    44             else wrong[j]++;                                                                    //错误,即题错误次数增加
    45         }
    46     }
    47     int max = wrong[0];
    48     for (int i = 0; i < m; ++i) if (max < wrong[i]) max = wrong[i];        //统计最高错误次数
    49     for (int i = 0; i < n; ++i)cout << stur[i] << endl;
    50     if (max != 0) {
    51         cout << max;
    52         for (int i = 0; i < m; ++i) if (wrong[i] == max) cout << ' ' << i + 1;    //输出和最高错误次数相同的题目编号
    53     }
    54     else cout << "Too simple";
    55     return 0;
    56 }

    默默地一点点变强,细节决定成败
  • 相关阅读:
    oracle 闪回操作--区别于快照
    easyui 低版本下拉多选框绑定onChange事件样式失真问题
    kvm虚拟机网络配置-网桥
    CentOS7.5使用KVM创建虚拟机
    梦醒时分
    姑娘
    Ventoy+WePE 装机教程
    PG-SSL安全配置
    转载-如何做一份完善的补丁分析
    网络流24题部分题解
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13567760.html
Copyright © 2020-2023  润新知