Bootstrap

【练习】PAT 乙 1061 判断题

题目

判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。

输入格式:
输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。

输出格式:

按照输入的顺序输出每个学生的得分,每个分数占一行。

输入样例:

3 6

2 1 3 3 4 5

0 0 1 0 1 1

0 1 1 0 0 1

1 0 1 0 1 0

1 1 0 0 1 1

输出样例:

13

11

12

来源:PAT 乙 1061 判断题


思路(注意事项)

三个数组。分别存放题目分值、题目正确答案、学生选择的答案。


纯代码

#include<bits/stdc++.h>

using namespace std;

int main(){
	int n, m;
	cin >> n >> m;
	
	vector<int> a(m), b(m);
	
	for (int i = 0; i < m; i ++) cin >> a[i];
	for (int i = 0; i < m; i ++) cin >> b[i];
	
	while (n --)
	{
		int sum = 0;
		vector<int> c(m);
		for (int i = 0; i < m; i ++)
		{
			cin >> c[i];
			if (c[i] == b[i]) sum += a[i];
		}
		cout << sum << endl;
	}
 	return 0;
} 

题解(加注释)

#include<bits/stdc++.h>

using namespace std;

int main(){
    int n, m;  // 定义变量 n 和 m,n 表示学生数量,m 表示题目数量
    cin >> n >> m;  // 输入学生数量 n 和题目数量 m
    
    vector<int> a(m), b(m);  // 定义两个长度为 m 的数组 a 和 b,a 存储每题的分值,b 存储每题的正确答案
    
    // 输入每题的分值
    for (int i = 0; i < m; i ++) cin >> a[i];
    // 输入每题的正确答案
    for (int i = 0; i < m; i ++) cin >> b[i];
    
    // 遍历每个学生
    while (n --)
    {
        int sum = 0;  // 定义变量 sum,用于存储当前学生的总分
        vector<int> c(m);  // 定义长度为 m 的数组 c,用于存储当前学生的答案
        
        // 输入当前学生的答案
        for (int i = 0; i < m; i ++)
        {
            cin >> c[i];
            // 如果当前学生的答案与正确答案一致,累加该题的分值
            if (c[i] == b[i]) sum += a[i];
        }
        
        // 输出当前学生的总分
        cout << sum << endl;
    }
    
    return 0;
}
;