1073 多選題常見計分法 (20 分)

批改多選題是比較麻煩的事情,有很多不同的計分方法。有一種最常見的計分方法是:如果考生選擇了部分正確選項,并且沒有選擇任何錯誤選項,則得到 50% 分數;如果考生選擇了任何一個錯誤的選項,則不能得分。本題就請你寫個程序幫助老師批改多選題,并且指出哪道題的哪個選項錯的人最多。

輸入格式:

輸入在第一行給出兩個正整數 N(≤1000)和 M(≤100),分別是學生人數和多選題的個數。隨后 M 行,每行順次給出一道題的滿分值(不超過 5 的正整數)、選項個數(不少于 2 且不超過 5 的正整數)、正確選項個數(不超過選項個數的正整數)、所有正確選項。注意每題的選項從小寫英文字母 a 開始順次排列。各項間以 1 個空格分隔。最后 N 行,每行給出一個學生的答題情況,其每題答案格式為?(選中的選項個數 選項1 ……),按題目順序給出。注意:題目保證學生的答題情況是合法的,即不存在選中的選項數超過實際選項數的情況。

輸出格式:

按照輸入的順序給出每個學生的得分,每個分數占一行,輸出小數點后 1 位。最后輸出錯得最多的題目選項的信息,格式為:錯誤次數 題目編號(題目按照輸入的順序從1開始編號)-選項號。如果有并列,則每行一個選項,按題目編號遞增順序輸出;再并列則按選項號遞增順序輸出。行首尾不得有多余空格。如果所有題目都沒有人錯,則在最后一行輸出?Too simple

輸入樣例 1:

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) (3 b d e) (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) (1 c) (4 a b c d)

輸出樣例 1:

3.5
6.0
2.5
2 2-e
2 3-a
2 3-b

輸入樣例 2:

2 2 
3 4 2 a c
2 5 1 b
(2 a c) (1 b)
(2 a c) (1 b)

輸出樣例 2:

5.0
5.0
Too simple
//分數 vector<int> total(m),正確選項 trueOpt[m]
//每道題的選項 vector<vector<int>> cnt<m,vector<in>(5)) 漏選或者錯選項次數
//option[1100][110] 學生選的答案 
#include<iostream>
#include<vector>
#include<set>
using namespace std;int main(){int n,m;int numOption,numRight;int hash[] = {1,2,4,8,16},optStu[1100][110] = {0};//數組聲明不能放在外面??編譯錯誤char c;    scanf("%d%d",&n,&m);vector<int> full_score(m),trueOption(m);vector<vector<int> > wrongCnt(m,vector<int>(5));//輸入題目信息和正確答案 for(int i = 0; i < m; i++){scanf("%d%d%d",&full_score[i],&numOption,&numRight);for(int j = 0; j < numRight; j++){//char c;scanf(" %c",&c);trueOption[i] += hash[c - 'a'];}}    //輸入學生選擇信息int temp;for(int i = 0; i < n; i++){double score = 0;for(int j = 0; j < m; j++){getchar();scanf("(%d",&temp);for(int k = 0; k < temp; k++){ //輸入ith學生對于 jth道題的選擇 scanf(" %c)",&c);optStu[i][j] += hash[c - 'a'];}int el = optStu[i][j] ^  trueOption[j];if(el){  //如果異或結果不為0,意味著有錯選或者漏選的情況 //異或的結果與正確答案或運算可以求出哪個和正確結果不相同 if((optStu[i][j] | trueOption[j]) == trueOption[j]){score += full_score[j] * 1.0 / 2;}if(el){ //將錯選的選項的每一項都要統計,無論這個單項選項是否是正確的單項 for(int k = 0; k < 5; k++)if(el & hash[k]) wrongCnt[j][k]++;}}else{score += full_score[j];}}printf("%.1f\n",score);} //尋找錯誤最多的選項int maxcnt = 0;for(int i = 0; i < m; i++){for(int j = 0; j < 5; j++)maxcnt = maxcnt > wrongCnt[i][j] ? maxcnt : wrongCnt[i][j];} if(maxcnt == 0) printf("Too simple\n");else{for(int i = 0; i < m; i++){for(int j = 0; j < wrongCnt[i].size(); j++){if(maxcnt == wrongCnt[i][j])printf("%d %d-%c\n",maxcnt,i+1,'a'+j);}}}return 0;
}

?

轉載于:https://www.cnblogs.com/wanghao-boke/p/10421139.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385169.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《二叉樹》目錄

序號題目標記 1 94. 二叉樹的中序遍歷 2 98. 驗證二叉搜索樹 3100. 相同的樹 4101. 對稱二叉樹 5 102. 二叉樹的層次遍歷 6 103. 二叉樹的鋸齒形層次遍歷 7104. 二叉樹的最大深度 8 105. 從前序與中序遍歷序列構造二叉樹 9106. 從中序與后序遍歷序列構造二叉樹 10107. 二叉…

1075 鏈表元素分類 (25 分)

給定一個單鏈表&#xff0c;請編寫程序將鏈表元素進行分類排列&#xff0c;使得所有負值元素都排在非負值元素的前面&#xff0c;而 [0, K] 區間內的元素都排在大于 K 的元素前面。但每一類內部元素的順序是不能改變的。例如&#xff1a;給定鏈表為 18→7→-4→0→5→-6→10→1…

C++ 面試(一)

1. 編譯器什么情況下&#xff0c;合成構造函數&#xff1f;[點擊鏈接(一)] 編譯器什么情況下&#xff0c;合成構造函數&#xff1f;

1074 宇宙無敵加法器 (20 分)

地球人習慣使用十進制數&#xff0c;并且默認一個數字的每一位都是十進制的。而在 PAT 星人開掛的世界里&#xff0c;每個數字的每一位都是不同進制的&#xff0c;這種神奇的數字稱為“PAT數”。每個 PAT 星人都必須熟記各位數字的進制表&#xff0c;例如“……0527”就表示最低…

九大經典算法之選擇排序、堆排序

05 選擇排序 &#xff08;Selection Sort&#xff09; 原理&#xff1a;每一次從待排序的數據元素中選出最小&#xff08;或最大&#xff09;的一個元素&#xff0c;存放在序列的起始位置&#xff0c;然后&#xff0c;再從剩余未排序元素中繼續尋找最小&#xff08;大&#xff…

九大經典算法之歸并排序

07 歸并排序 &#xff08;Merge Sort&#xff09; 歸并操作的工作原理如下&#xff1a;第一步&#xff1a;申請空間&#xff0c;使其大小為兩個已經排序序列之和&#xff0c;該空間用來存放合并后的序列&#xff1b;第二步&#xff1a;設定兩個指針&#xff0c;最初位置分別為兩…

長連接和Keepalive詳解

客戶端主機依舊活躍&#xff08;up&#xff09;運行&#xff0c;并且從服務器可到達。從客戶端TCP的正常響應&#xff0c;服務器知道對方仍然活躍。服務器的TCP為接下來的兩小時復位存活定時器&#xff0c;如果在這兩個小時到期之前&#xff0c;連接上發生應用程序的通信&#…

九大經典算法之基數排序、桶排序

08 基數排序&#xff08;Radix Sort&#xff09; 基數排序是一種非比較型整數排序算法&#xff0c;其原理是將整數按位數切割成不同的數字&#xff0c;然后按每個位數分別比較。排序過程是將所有待比較數值統一為同樣的數位長度&#xff0c;數位較短的數前面補零&#xff0c;然…

非阻塞connect

在 socket 是阻塞模式下 connect 函數會一直到有明確的結果才會返回&#xff08;或連接成功或連接失敗&#xff09;&#xff0c;如果服務器地址“較遠”&#xff0c;連接速度比較慢&#xff0c;connect 函數在連接過程中可能會導致程序阻塞在 connect 函數處好一會兒&#xff0…

1076 Wifi密碼 (15 分)

下面是微博上流傳的一張照片&#xff1a;“各位親愛的同學們&#xff0c;鑒于大家有時需要使用 wifi&#xff0c;又怕耽誤親們的學習&#xff0c;現將 wifi 密碼設置為下列數學題答案&#xff1a;A-1&#xff1b;B-2&#xff1b;C-3&#xff1b;D-4&#xff1b;請同學們自己作答…

和為S的連續正數序列

題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他并不滿足于此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能…

1077 互評成績計算 (20 分)

在浙大的計算機專業課中&#xff0c;經常有互評分組報告這個環節。一個組上臺介紹自己的工作&#xff0c;其他組在臺下為其表現評分。最后這個組的互評成績是這樣計算的&#xff1a;所有其他組的評分中&#xff0c;去掉一個最高分和一個最低分&#xff0c;剩下的分數取平均分記…

1080 MOOC期終成績 (25 分)

對于在中國大學MOOC&#xff08;http://www.icourse163.org/ &#xff09;學習“數據結構”課程的學生&#xff0c;想要獲得一張合格證書&#xff0c;必須首先獲得不少于200分的在線編程作業分&#xff0c;然后總評獲得不少于60分&#xff08;滿分100&#xff09;。總評成績的計…

1078 字符串壓縮與解壓 (20 分)

文本壓縮有很多種方法&#xff0c;這里我們只考慮最簡單的一種&#xff1a;把由相同字符組成的一個連續的片段用這個字符和片段中含有這個字符的個數來表示。例如 ccccc 就用 5c 來表示。如果字符沒有重復&#xff0c;就原樣輸出。例如 aba 壓縮后仍然是 aba。 解壓方法就是反過…

120. 三角形最小路徑和

給定一個三角形&#xff0c;找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。 例如&#xff0c;給定三角形&#xff1a; [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自頂向下的最小路徑和為 11&#xff08;即&#xff0c;2 3 5 1 11&#xff09;…

1079 延遲的回文數 (20 分)

給定一個 k1 位的正整數 N&#xff0c;寫成 a?k???a?1??a?0?? 的形式&#xff0c;其中對所有 i 有 0≤a?i??<10 且 a?k??>0。N 被稱為一個回文數&#xff0c;當且僅當對所有 i 有 a?i??a?k?i??。零也被定義為一個回文數。 非回文數也可以通過一系…

1081 檢查密碼 (15 分)

本題要求你幫助某網站的用戶注冊模塊寫一個密碼合法性檢查的小功能。該網站要求用戶設置的密碼必須由不少于6個字符組成&#xff0c;并且只能有英文字母、數字和小數點 .&#xff0c;還必須既有字母也有數字。 輸入格式&#xff1a; 輸入第一行給出一個正整數 N&#xff08;≤ …

1082 射擊比賽 (20 分)

本題目給出的射擊比賽的規則非常簡單&#xff0c;誰打的彈洞距離靶心最近&#xff0c;誰就是冠軍&#xff1b;誰差得最遠&#xff0c;誰就是菜鳥。本題給出一系列彈洞的平面坐標(x,y)&#xff0c;請你編寫程序找出冠軍和菜鳥。我們假設靶心在原點(0,0)。 輸入格式&#xff1a; …

LRU緩存機制

運用你所掌握的數據結構&#xff0c;設計和實現一個 LRU (最近最少使用) 緩存機制。它應該支持以下操作&#xff1a; 獲取數據 get 和 寫入數據 put 。 獲取數據 get(key) - 如果密鑰 (key) 存在于緩存中&#xff0c;則獲取密鑰的值&#xff08;總是正數&#xff09;&#xff…

1083 是否存在相等的差 (20 分)

給定 N 張卡片&#xff0c;正面分別寫上 1、2、……、N&#xff0c;然后全部翻面&#xff0c;洗牌&#xff0c;在背面分別寫上 1、2、……、N。將每張牌的正反兩面數字相減&#xff08;大減小&#xff09;&#xff0c;得到 N 個非負差值&#xff0c;其中是否存在相等的差&#…