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

本文介绍了一个用于处理复杂选择题的评分系统,该系统不仅能够计算学生的得分,还能统计每个题目中被错误选择最多的选项,为教师提供详细的错误分析。系统使用C++编程语言实现,涉及字符串处理、数据结构和算法设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

实现(做的比较繁琐,以后再想吧!)

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
struct node {
	int score;
	int chooseNum;
	int correctNum;
	int wrongNum;	//学生错误次数
	int options[5];	//记录各个选项的错误次数
	string answer;
};
int main()
{
	int N, M,i,j,score,choose;
	char ch;
	string str;
	cin >> N >> M;
	vector<node> ques(M);
	for (i = 0; i < M; i++)
	{
		cin >> ques[i].score >> ques[i].chooseNum >> ques[i].correctNum;
		ques[i].answer = "";
		ques[i].wrongNum = 0;
		for (j = 0; j < 5; j++) ques[i].options[j] = 0;
		for (j = 0; j < ques[i].correctNum; j++)
		{
			cin >> ch;
			ques[i].answer += ch;
		}
	}
	getchar();
	int wrongNum=0,count=0,m;
	double getScore = 0;
	string answer;
	bool wrong ;
	for (i = 0; i < N; i++)
	{
		getScore = 0; answer = "";
		getline(cin, str);
		str.erase(remove(str.begin(), str.end(),' '),str.end());
		str.erase(remove(str.begin(), str.end(), '('), str.end());
		str.erase(remove(str.begin(), str.end(), ')'), str.end());
		for (j = 0,count=0; j < str.size();)
		{
			wrong = false;
			answer = str.substr(j+1, str[j]-'0');
			if (answer == ques[count].answer)
				getScore += ques[count].score;
			else
			{
				ques[count].wrongNum++;
				for (m = 0; m < answer.size(); m++)
				{
					if (ques[count].answer.find(answer[m]) == string::npos)
					{
						wrong = true; 
						ques[count].options[answer[m] - 'a'] += 1;
					}
				}
				for (m = 0; m < ques[count].answer.size(); m++)
				{
					if (answer.find(ques[count].answer[m]) == string::npos)
						ques[count].options[ques[count].answer[m] - 'a'] += 1;
				}
				if (!wrong)
					getScore += (ques[count].score*1.0) / 2;
			}
			j += str[j]-'0'+1;
			count++;

		}
		cout <<fixed<< setprecision(1) << getScore << endl;
	}
	int maxOfAll=0;
	for (i = 0; i < M; i++)
	{
		int maxOption = *max_element(ques[i].options, ques[i].options+5);
		if (maxOption > maxOfAll)
			maxOfAll = maxOption;
	}
	if (maxOfAll == 0)
		cout << "Too simple" << endl;
	else
	{
		for (i = 0; i < M; i++)
		{
			for (j = 0; j < 5; j++)
			{
				if (ques[i].options[j] == maxOfAll)
					cout << maxOfAll << " " << i + 1 << "-" << char(j + 'a') << endl;
			}
		}
	}
	

    return 0;
}


<think>好的,我现在需要处理用户关于寻找PAT乙级题目解答的请求。首先,用户希望得到详细的解答与解析,并且希望回答具有实用性和可操作性。根据任务要求,我需要调用网络搜索工具来获取相关信息,然后整合这些信息生成结构清晰的回答。 首先,我应该确认PAT乙级考试的相关信息,比如它是什么,考察内容等。然后,针对用户的问题,寻找常见的解答途径。可能包括官方资源、在线评测平台、技术社区和书籍资料等。需要确保每个方都有具体的例子或链接,方便用户操作。 接下来,我需要考虑如何组织这些信息。用户要求多个方或步骤,每个步骤间换行,避免使用步骤词汇,所以可能需要用标题式的点,比如“官方资源”、“在线评测平台”等作为每个部的小标题。 然后,检查是否需要代码或公式。题目解答中可能会有代码示例,所以需要按照格式要求,用三个反引号包裹代码,并注明语言类型。例如,在举例题目1001时,应该提供一个Python代码示例,并正确格式化。 另外,回答中不能将引用集中在末尾,所以每个引用可能需要自然地嵌入到各个部中。例如,提到牛客网时直接说明其特点,并可能提到具体的题目链接,但根据实际搜索结果,可能无提供具体链接,所以需要笼统描述。 还要注意避免使用第一人称,所以用客观陈述的方式介绍各个资源和方。例如,“PAT官网提供历年真题”而不是“我建议访问PAT官网”。 生成相关问题部时,需要基于用户的原问题和回答内容。可能的后续问题包括如何备考、常见错误、题目难度析等,确保每个问题都与PAT乙级解答相关,并且能帮助用户进一步获取信息。 最后,检查格式是否符合要求,特别是数学公式和代码部,确保没有遗漏。同时,确保相关问题部使用正确的标题,并且每个问题用数字标号,没有多余的空格或换行。</think>根据PAT乙级真题的解答需求,整合以下解题思路和资源渠道供参考: **官方资源与OJ平台** 浙江大学PAT官网(https://pat.zju.edu.cn/)提供历年真题题库及在线评测功能。部题目配备标准答案代码,适合基础训练与提交验证。例如题目1001(害死人不偿命的3n+1猜想)的Python实现: ```python n = int(input()) count = 0 while n != 1: n = n // 2 if n % 2 == 0 else (3*n + 1)//2 count +=1 print(count) ``` **技术社区解析** 优快云、博客园等平台包含大量真题解析笔记,用户"柳婼"的题解系列(如《算笔记》配套题解)提供C++/Java/Python多语言实现。典型解题步骤包含: - 输入数据处理(如使用`map(int, input().split())`) - 核心算实现(如素数判断函数`is_prime`) - 输出格式控制(`print(f"{x:.1f}")`) **数据结构应用实例** 常见考点涉及哈希表应用,如1042字符统计题: ```python from collections import defaultdict s = input().lower() d = defaultdict(int) for c in s: if c.isalpha(): d[c] +=1 max_c = max(d, key=lambda x: (-d[x],x)) print(max_c, d[max_c]) ``` **数学公式推导** 部题目涉及数论知识,如1007素数对猜想需验证$p$和$p+2$同为素数的情况: $$ \exists p \in \mathbb{P},\ p+2 \in \mathbb{P} $$ 通过埃拉托斯特尼筛可优化计算效率,时间复杂度控制在$O(n\log\log n)$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值