欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Pat乙级 1058 选择题

发布时间:2025/4/16 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Pat乙级 1058 选择题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Pat乙级1058 选择题

  • 思路
  • 代码

题目网址
https://pintia.cn/problem-sets/994805260223102976/problems/994805270356541440

思路

注意下输入的格式,用scanf处理。第1个测试点输出Too simple前先输出每个人的分数,然后输出Too simple,直接return 0。
data二维数组中,每一行最后一个存那道题的分数,倒数第二个存正确选项的个数。

代码

#include<iostream> #define MAX 1005using namespace std;int data[MAX][MAX] = {0}; int vis[MAX] = {0};int main() {int n;int m;int score;int num;int num_right;char c;int N;int sum = 0;char temp;int flag;scanf("%d %d", &n, &m);for (int i = 1; i <= m; i ++) { scanf("%d %d %d", &score, &num, &num_right);for (int j = 1; j <= num_right; j ++) {scanf(" %c", &c);c = tolower(c);if (c >= 'a' && c <= 'e')data[i][c - 'a' + 1] = 1;}data[i][0] = score; data[i][MAX - 2] = num_right;}for (int i = 1; i <= n; i ++) {scanf("\n");for (int j = 1; j <= m; j ++) {if (j > 1)scanf(" ");scanf("(%d", &N);flag = 0;if (N != data[j][MAX - 2])flag = 1;for (int k = 1; k <= N; k ++) {scanf(" %c", &c);c = tolower(c);if (c >= 'a' && c <= 'e')if (data[j][c - 'a' + 1] <= 0)flag = 1;}scanf(")");if (flag <= 0)data[i][MAX - 1] += data[j][0];else {vis[j] ++;sum ++;}}}for (int i = 1; i <= n; i ++ )cout << data[i][MAX - 1] << endl;if (sum <= 0) {cout << "Too simple";return 0;}int TheMax = -1;int cnt = 0;for (int i = 1; i <= m; i ++) if (vis[i] > TheMax) TheMax = vis[i];cout << TheMax;for (int i = 1; i <= m; i ++) {if (vis[i] == TheMax)cout << " " << i;}return 0; }

总结

以上是生活随笔为你收集整理的Pat乙级 1058 选择题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。