1073 多選題常見計分法

2021-09-26 13:44:05 字數 1343 閱讀 7176

/**

* 1.解題思路:錯誤是指錯選或者漏選。用異或運算來判斷乙個選項和正確選項是否匹配

* 如果是匹配的,那麼異或的結果應當是0;如果不匹配

* 那麼這個選項就是存在錯選或者漏選的情況

* 例如:設a為00001,b為00010,c為00100,d為01000,e為10000

* 如果給定的正確答案是ac,即10001,那麼如果給出的選項也是10001

* 異或的結果就是0;如果給出的選項是a或者ab,即00001或00011,異或之後不為0

* 就是錯選和漏選的~通過異或操作的結果,再用與運算就可以把錯選和漏選的選項找出來

* fullscore表示一道題滿分的分值;trueopt表示正確的選項,儲存的是正確選項二進位制的值

* 二進位制由hash給出分別是1,2,4,8,16;cnt是錯誤的次數,maxcnt是最大錯誤次數

* * 2.異或:如果a、b兩個值不相同,則異或結果為1。 如果a、b兩個值相同,異或結果為0

* **/

#include #include #include using namespace std;

int main() , opt[1010][110] = ;

char c;

scanf("%d %d", &n, &m);

//fullscore表示一道題滿分的分值;trueopt表示正確的選項,儲存的是正確選項二進位制的值

vectorfullscore(m), trueopt(m);

//cnt是錯誤的次數

vector> cnt(m, vector(5));

//一道題的滿分值 選項個數 正確選項個數

for (int i = 0; i < m; i++)

}for (int i = 0; i < n; i++)

//異或

int el = opt[i][j] ^ trueopt[j];

if (el)

if (el)

} else

}printf("%.1f\n", grade);

}//找出最大錯誤次數

for (int i = 0; i < m; i++)

for (int j = 0; j < 5; j++)

maxcnt = maxcnt > cnt[i][j] ? maxcnt : cnt[i][j];

if (maxcnt == 0) else }}

return 0;

}

1073 多選題常見計分法

批改多選題是比較麻煩的事情,有很多不同的計分方法。有一種最常見的計分方法是 如果考生選擇了部分正確選項,並且沒有選擇任何錯誤選項,則得到50 分數 如果考生選擇了任何乙個錯誤的選項,則不能得分。本題就請你寫個程式幫助老師批改多選題,並且指出哪道題的哪個選項錯的人最多。輸入格式 輸入在第一行給出兩個正...

1073 多選題常見計分法

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

1073 多選題常見計分法

批改多選題是比較麻煩的事情,有很多不同的計分方法。有一種最常見的計分方法是 如果考生選擇了部分正確選項,並且沒有選擇任何錯誤選項,則得到 50 分數 如果考生選擇了任何乙個錯誤的選項,則不能得分。本題就請你寫個程式幫助老師批改多選題,並且指出哪道題的哪個選項錯的人最多。輸入在第一行給出兩個正整數 n...