前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1058 选择题 (20 分)

1058 选择题 (20 分)

作者头像
可爱见见
发布2019-10-25 01:53:58
5230
发布2019-10-25 01:53:58
举报
文章被收录于专栏:卡尼慕卡尼慕

1058 选择题 (20 分)

【代码】

代码语言:javascript
复制
 1// 1058 选择题 (20 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
 2//
 3
 4#include<stdio.h>
 5#include<string.h>
 6#include<algorithm>
 7using namespace std;
 8struct ti {
 9    int tihao;
10    int fen;
11    int xuan;
12    int Tnum;
13    bool zhengquedaan[127] = { 0 };//用整数形式保存正确选项
14    int cuo = 0;
15}Data[101];
16//根据错题数量排序
17bool cmp(ti A, ti B) {
18    if (A.cuo != B.cuo) return A.cuo > B.cuo;
19    else return A.tihao < B.tihao;
20}
21int main() {
22    int N, M;//学生,题
23    scanf("%d %d", &N, &M);
24    for (int i = 0; i < M; i++) {//题数
25        scanf("%d", &Data[i].fen);
26        scanf("%d", &Data[i].xuan);
27        scanf("%d", &Data[i].Tnum);
28        for (int j = 0; j < Data[i].Tnum; j++) {
29            char c;
30            scanf(" %c", &c);
31            int a = c;
32            Data[i].zhengquedaan[a] = true;
33        }
34        Data[i].tihao = i + 1;
35    }
36    //输入学生
37    for (int i = 0; i < N; i++) {                                      
38        int fenshu = 0;
39        //输入处理选项
40        for (int k = 0; k < M; k++) {                                  
41            int num; char c;
42            int zhengnum = 0;
43            int flag = true;
44            scanf(" (%d", &num);
45            for (int j = 0; j < num; j++) {                             //验证答案
46                scanf(" %c", &c);
47                if (Data[k].zhengquedaan[c]) zhengnum++;
48                else flag = false;
49            }
50            //吸收括号
51            getchar();                                         
52            if (zhengnum == Data[k].Tnum && flag) fenshu += Data[k].fen;
53            else Data[k].cuo++;
54        }
55        printf("%d\n", fenshu);
56    }
57    //根据错误情况排序
58    sort(Data, Data + M, cmp);
59    if (Data[0].cuo == 0) {
60        printf("Too simple");
61        return 0;
62    }
63    printf("%d", Data[0].cuo);
64    for (int i = 0; i < M; i++) {
65        if (Data[i].cuo != Data[0].cuo) break;
66        printf(" %d", Data[i].tihao);
67    }
68    return 0;
69}

【思路】

这道题比较复杂,难点就是很容易绕晕。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡尼慕 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档