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

1073 多选题常见计分法 (20 分)

作者头像
可爱见见
发布2019-11-05 16:00:46
5360
发布2019-11-05 16:00:46
举报
文章被收录于专栏:卡尼慕卡尼慕

1073 多选题常见计分法 (20 分)

【我的代码】

代码语言:javascript
复制
// 1073 多选题常见计分法 (20 分)
#include <iostream>
#include <string.h>
using namespace std;
struct Timu{
    double mark;
    int nc;
    int ny;
    int ncount[5] = {0};        //用于记录每个选项错误次数
    int pd[5] = { 0 };
}s[101]; 
double judge(int a[5], int b[5], int k){
    int count = 0;
    int yn = 0; //0为答对,1为答错
    for(int i = 0; i < s[k].nc; i++){
        if(b[i] && a[i]){   //如果输入为正确,正确计数器++ 
            count++;
        }
        else if (a[i] && !b[i]) {      //没有输入的正确选项
            s[k].ncount[i]++;
        }
        else if (!a[i] && b[i]) {      //输入了一个错误的选项
            s[k].ncount[i]++;
            yn = 1;
        }
    }
    if(yn) return 0;
    else if(count != s[k].ny) return s[k].mark/2;
    else if(count == s[k].ny) return s[k].mark; 
}
int main(){
    int N, M;//学生人数和多选题个数
    cin>>N>>M;
    double sum;
    char ch;
    int t[5];        //用t记录输入的选项
    //遍历题目 
    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; 
        }   
    } 
    //遍历学生
    int k;
    for(int i = 0;i < N; i++){
        sum = 0;
        for(int j = 0; j < M; j++){
            cin>>ch>>k;
            memset(t, 0, sizeof(t)); //重置为0
            for(int z = 0; z < k; z++){
                cin>>ch;
                t[ch - 'a']++;
            }
            //判断得分与比对答案
            sum += judge(s[j].pd, t, j); 
            cin>>ch;
        }
        printf("%0.1lf\n", sum);
    } 
    int max = 0;
    for(int i = 0; i < M; i++){
        for(int j = 0;j < s[i].nc; j++){
            max = s[i].ncount[j] > max ? s[i].ncount[j] : max;
        }
    }
    if(max){
        for(int i = 0; i < M; i++){
            for(int j = 0; j < s[i].nc; j++){
                if(s[i].ncount[j] == max){
                    cout<<max<<" "<<i+1<<"-"<<(char) (j+'a')<<endl;
                }
            }
        }
    }
    else{
        cout<<"Too simple";
    }
    return 0;
} 

【总结】

这题目跟前面有一题很类似,同样需要建立题目的结构体。

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

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

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

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

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