PTA 乙级 1058 选择题 (20分) C++
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PTA 乙级 1058 选择题 (20分) C++,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2929字,纯文字阅读大概需要5分钟。
内容图文
![PTA 乙级 1058 选择题 (20分) C++](/upload/InfoBanner/zyjiaocheng/626/5961745a8e754efc8731acc2d47b3558.jpg)
题目输入和输出比较繁琐,说一下思路
思路:
- 建立一个题目信息的结构体,包含题目满分,选项个数,正确选项个数。正确选项字母,之后分别输入(所有题目信息统计完成)
- 两层循环,第一层是学生数,第二层是题目数,题中有具体学生选项输入格式(选中的选项个数,选项1...)且每个题用空格隔开,利用一个特定的输入格式即可实现输入
1 int r = 0; //学生选中选项个数 2 char w[5] = { '\0' }, c; //注意在topic的结构体中,char word[5]默认初始化为'\0',保持空位一致 3 while ((c = getchar()) != ')') { //在1052卖个萌中用到过这种输入方法,实现按规定格式的输入 4 if (c == '(') { 5 cin >> r; 6 for (int k = 0; k < r; ++k)cin >> w[k]; 7 } 8 }
- 利用<cstring>中的strcmp实现学生选项和正确选项的比较,正确即学生所得分数增加,错误即本题错误数增加
-
遍历每个题的错误次数,找到最高错误数
- 输出每个学生的得分后,若最高错误数为0,则输出“Too simple”,否则,输出最高错误数,和与最高错误数错误数相同的编号(注意编号是从1算起的,需要在数组角标基础上再加1)
1 #include<iostream> 2 #include<vector> 3 #include<cstring> 4 5 using namespace std; 6 7 struct text { 8 /*满分*/ 9 int full; 10 /*选项个数*/ 11 int num; 12 /*正确选项个数*/ 13 int right; 14 /*正确选项字母*/ 15 char word[5]; 16 }; 17 18 int main() { 19 /*N,M*/ 20 int n = 0, m = 0; 21 cin >> n >> m; 22 /*题目*/ 23 vector<text> topic(m); 24 /*学生得分*/ 25 vector<int> stur(n); 26 /*每个题错的次数*/ 27 vector<int> wrong(m); 28 //有关题目信息的输入 29 for (int i = 0; i < m; ++i) { 30 cin >> topic[i].full >> topic[i].num >> topic[i].right; 31 for (int j = 0; j < topic[i].right; ++j)cin >> topic[i].word[j]; 32 } 33 for (int i = 0; i < n; ++i) { 34 for (int j = 0; j < m; ++j) { 35 int r = 0; //学生选中选项个数 36 char w[5] = { '\0' }, c; //注意在topic的结构体中,char word[5]默认初始化为'\0',保持空位一致 37 while ((c = getchar()) != ')') { //在1052卖个萌中用到过这种输入方法,实现按规定格式的输入 38 if (c == '(') { 39 cin >> r; 40 for (int k = 0; k < r; ++k)cin >> w[k]; 41 } 42 } 43 if (r == topic[j].right && strcmp(topic[j].word, w) == 0) stur[i] += topic[j].full; //正确 44 else wrong[j]++; //错误,即题错误次数增加 45 } 46 } 47 int max = wrong[0]; 48 for (int i = 0; i < m; ++i) if (max < wrong[i]) max = wrong[i]; //统计最高错误次数 49 for (int i = 0; i < n; ++i)cout << stur[i] << endl; 50 if (max != 0) { 51 cout << max; 52 for (int i = 0; i < m; ++i) if (wrong[i] == max) cout << ' ' << i + 1; //输出和最高错误次数相同的题目编号 53 } 54 else cout << "Too simple"; 55 return 0; 56 }
内容总结
以上是互联网集市为您收集整理的PTA 乙级 1058 选择题 (20分) C++全部内容,希望文章能够帮你解决PTA 乙级 1058 选择题 (20分) C++所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】