日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【详细注释】1058 选择题 (20 分)

發布時間:2024/2/28 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【详细注释】1058 选择题 (20 分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

立志用最少的代碼做最高效的表達


PAT乙級最優題解——>傳送門


批改多選題是比較麻煩的事情,本題就請你寫個程序幫助老師批改多選題,并且指出哪道題錯的人最多。

輸入格式:
輸入在第一行給出兩個正整數 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


簡單模擬, 代碼中給了詳細注釋。

#include<bits/stdc++.h> using namespace std;struct problem{int a[300] = {0}; //記錄正確選項 int t_num = 0; //正確選項個數 int sc = 0; //本題分數 int f = 0; //本題錯誤次數 }pro[110];int stu[1010] = {0};int main() {//輸入題 int n, m; cin >> n >> m;for(int i = 0; i < m; i++) {int a, b, c; cin >> pro[i].sc >> b >> pro[i].t_num;for(int j = 0; j < pro[i].t_num; j++) {char x; cin >> x; pro[i].a[x]++;}}getchar();//輸入學生for(int i = 0; i < n; i++) {string s; getline(cin, s);int sta = 0;for(int j = 0; j < m; j++) { //遍歷學生的選項,一共m個 int num = 0, t = 0; //選項個數和正確選項個數 int fin = s.find(')',sta); //以右括號為終點for(int k = sta; k < fin; k++) { //遍歷括號中的數 if(isdigit(s[k])) //如果是數字,則為選項個數 t = s[k]-'0';if(isalpha(s[k])) //如果是字母 if(pro[j].a[s[k]] == 1) //判斷是否匹配 num++; //匹配錯誤 }if(num == pro[j].t_num && num == t) //如果正確選項個數相同 stu[i] += pro[j].sc; //則該學生得到該分數 else pro[j].f++; //錯誤則該題錯誤次數+1 sta = fin+1; //更新sta的值 }}//輸出學生的分數 for(int i = 0; i < n; i++) {cout << stu[i] << '\n'; }//求題的錯誤次數int Max = -1;for(int i = 0; i < m; i++) {Max = max(Max, pro[i].f);} if(Max == 0 || Max == -1 ) cout << "Too simple\n";else {cout << Max;for(int i = 0; i < m; i++) {if(pro[i].f == Max)cout << ' ' << i+1; }}return 0; }

每日一句

你的潛意識,正在操控你的人生,而你卻稱其為命運。

總結

以上是生活随笔為你收集整理的【详细注释】1058 选择题 (20 分)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。