PTA 1073 多选题常见计分法 (c++)
2019-08-17 17:21
1081 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44622401/article/details/99695538
分析:这道题和1058有点类似。这类题属于那种很容易想出来应该怎么解,但是写的时候可能会有点绕。比较考验你的思路是不是很清晰。小建议:可以把一系列处理操作分块处理,封装成函数,最后调用就可以了。下面的代码来自这篇文章https://blog.csdn.net/qq_40946921/article/details/81166375
">#include<string> #include<cmath> using namespace std; struct number { double mark; int nc; int ny; int ncount[101] = {0}; //用于记录每个选项错误次数 int pd[101] = { 0 }; }s[101]; double judge(int a[100], int b[100] ,int k) { //a为正确选项,b为输入选项 int count = 0; //正确计数器 int yn = 0; //0为答对,1为答错 for (int i = 0; i < s[k].nc; i++) { if (b[i] && a[i]) { //如果输入为正确,正确计数器+1 count++; } else if (a[i] && !b[i]) { //没有输入的正确选项 s[k].ncount[i]++; } else if (!a[i] && b[i]) { //输入了一个错误的选项 s[k].ncount[i]++; yn = 1; } } if (yn) return 0; else if (count != s[k].ny) //部分正确 return s[k].mark / 2; else if (count == s[k].ny) //全部正确 return s[k].mark; //返回得分 } int main() { int n, m, k; double sum; char ch; int t[101]; //用t记录输入的选项 cin >> n >> m; for (int i = 0; i < m; i++) { cin >> s[i].mark >> s[i].nc >> s[i].ny; for (int j = 0; j < s[i].ny; j++) { cin >> ch; s[i].pd[ch - 'a'] = 1; } } for (int i = 0; i < n; i++) { sum = 0; for (int j = 0; j < m; j++) { cin >> ch >> k; for (int i = 0; i < 101; i++) t[i] = 0; //t置为空 for (int h = 0; h < k; h++) { cin >> ch; t[ch - 'a']++; } sum+=judge(s[j].pd, t,j); cin >> ch; } printf("%0.1lf\n", sum); } int max = 0; for (int i = 0; i < m; i++) { //寻找最大值 for (int j = 0; j < s[i].nc; j++) max = s[i].ncount[j] > max ? s[i].ncount[j] : max; } if (max) { //存在最大值(即有错题) for (int i = 0; i < m; i++) { for (int j = 0; j < s[i].nc; j++) if (s[i].ncount[j] == max) { cout << max << " " << i + 1 << "-" << (char)(j + 'a') << endl; } } } else cout << "Too simple"; return 0; }
相关文章推荐
- PAT (Basic Level) Practice (中文)1073 多选题常见计分法 (C语言)
- C++ PAT 1073. 多选题常见计分法(20)
- PAT 1073 多选题常见计分法 (20 分)
- 1073. 多选题常见计分法
- PAT (Basic Level) Practise (中文) 1073. 多选题常见计分法(20)
- PAT乙级1073. 多选题常见计分法(20)
- 1073. 多选题常见计分法(20)
- 1073. 多选题常见计分法(20)
- 1073. 多选题常见计分法(20)
- 1073 多选题常见计分法
- 1073. 多选题常见计分法(20)
- 1073. 多选题常见计分法(20)
- PAT Basic 1073. 多选题常见计分法
- 1073. 多选题常见计分法(20)
- 1073. 多选题常见计分法(20)
- PAT 1073. 多选题常见计分法(20)-PAT乙级真题
- 1073. 多选题常见计分法(20)
- 1073. 多选题常见计分法(20)
- 1073. 多选题常见计分法(20)
- 1073. 多选题常见计分法(20) PAT乙级真题