本文主要是介绍PAT (Advanced Level) Practice——1011,1012,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1011:
链接:
1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn)
题意及解题思路:
简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。
同时还需要记录每一次选择的是W,T还是L,储存在字符串中即可,每一次后面加上一个空格,刚好结尾没有空格。
我刚开始理解成立奇数odd,但是odds表示赔率。
#include <bits/stdc++.h>using namespace std;typedef struct {double w, t, l;
} X;int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);vector<X> a;for (int i = 0; i < 3; i++) {double w, t, l;cin >> w >> t >> l;a.push_back({w, t, l});}char results[3] = {'W', 'T', 'L'};double Mul = 1.0;string bets;for (int i = 0; i < 3; i++) {double maxNum = max(a[i].w,max(a[i].t, a[i].l));Mul *= maxNum;if (maxNum == a[i].w) {bets += "W ";} else if (maxNum == a[i].t) {bets += "T ";} else {bets += "L ";}}double ans = (Mul * 0.65 - 1) * 2;cout << bets;printf("%.2lf\n", ans);return 0;
}
1012:
链接:
1012 The Best Rank - PAT (Advanced Level) Practice (pintia.cn)
题意:
简单来说就是根据询问,给出对应id值的最好名次以及最好名次对应的科目,如果不存在该id就输出N/A
解题思路:
-
输入与预处理:
- 读取每个学生的ID和他们在C语言、数学、英语的成绩。
- 计算每个学生的平均成绩。
- 这里很巧妙就在于我们根据成绩优先级来存入各个成绩,例如score[0]表示平均成绩,score[1]表示c语言的乘积,这样后续就能循环从0~3对各个成绩进行排名
-
排序与排名:
- 对每个科目(包括平均分、C语言、数学、英语)分别进行排序,按照成绩从高到低为学生排名。相同成绩的学生获得相同排名。
- 这里有一个很巧妙的地方,就是通过循环,用变量subject对每一个科目进行降序排序
-
确定最佳排名:
- 对每个学生,找出他在四个排名中的最佳排名(数值最小),并按照优先级(平均分 > C语言 > 数学 > 英语)确定最佳科目。
-
查询与输出:
- 根据输入的学生ID,输出他们的最佳排名和对应的科目。如果学生不存在,输出“N/A”。
- 可以通过map来确定id值是否存在
#include <bits/stdc++.h>
using namespace std;
const int N = 2005;typedef struct {string id;int best;char bestSub;int Rank[4], score[4];//四科的排名以及成绩
} node;node a[N];
map<string, bool> st;
int subject = -1;
char mp[4] = {'A', 'C', 'M', 'E'};bool cmp(node a, node b) {return a.score[subject] > b.score[subject];
}int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n, m;cin >> n >> m;for (int i = 0; i < n; i++) {cin >> a[i].id;cin >> a[i].score[1] >> a[i].score[2] >> a[i].score[3];a[i].score[0] = (a[i].score[1] + a[i].score[2] + a[i].score[3]) / 3;st[a[i].id] = true;}// 对每个科目进行排名for (subject = 0; subject <= 3; subject++) {sort(a, a + n, cmp);for (int i = 0; i < n; i++) {a[i].Rank[subject] = i + 1;if (i > 0 && a[i].score[subject] == a[i - 1].score[subject]) {a[i].Rank[subject] = a[i - 1].Rank[subject];}}}// 确定每个学生的最佳排名for (int i = 0; i < n; i++) {int maxRank = N;char bestSub;for (int j = 0; j < 4; j++) {if (a[i].Rank[j] < maxRank) {maxRank = a[i].Rank[j];bestSub = mp[j];}}a[i].best = maxRank;a[i].bestSub = bestSub;}// 查询并输出结果for (int i = 0; i < m; i++) {string id;cin >> id;if (st[id]) {for (int j = 0; j < n; j++) {if (a[j].id == id) {cout << a[j].best << " " << a[j].bestSub << "\n";break;}}} else {cout << "N/A\n";}}return 0;
}
这篇关于PAT (Advanced Level) Practice——1011,1012的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!