PAT (Basic Level) Practice 乙级1046-1050
发布日期:2025-05-01 22:53:19 浏览次数:2 分类:技术文章

本文共 4364 字,大约阅读时间需要 14 分钟。

制作不易,大家的点赞和关注就是我更新的动力!

由于这些题全是大一寒假刷的,部分还是c语言,部分的解题方法比较复杂,希望大家体谅。有问题欢迎大家在评论区讨论,有不足也请大家指出,谢谢大家!

温馨提示:可以点目录跳转到相应题目哦。

1046 划拳

分数 15

作者 CHEN, Yue

单位 浙江大学

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。

下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。

输入格式:

输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳的记录,格式为:

甲喊 甲划 乙喊 乙划

其中是喊出的数字,是划出的数字,均为不超过 100 的正整数(两只手一起划)。

输出格式:

在一行中先后输出甲、乙两人喝酒的杯数,其间以一个空格分隔。

输入样例:

58 10 9 125 10 5 103 8 5 1212 18 1 134 16 12 15

输出样例:

1 2

代码: 

#include 
#include
#include
#include
#include
using namespace std;int main(){ int n,jia=0,yi=0,i,j; cin>>n; int jhan,jhua,yhan,yhua; for(i=0;i
>jhan>>jhua>>yhan>>yhua; jj=jhan+jhua;yy=yhan+yhua; if(jhua==jhan+yhan&&yhua!=jhan+yhan) { yi++; } else if(yhua==jhan+yhan&&jhua!=jhan+yhan){ jia++; } } cout<
<<" "<

 1047 编程团体赛

分数 20

作者 CHEN, Yue

单位 浙江大学

编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。

现给定所有队员的比赛成绩,请你编写程序找出冠军队。

输入格式:

输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。

输出格式:

在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。

输入样例:

63-10 9911-5 87102-1 0102-3 10011-9 893-2 61

输出样例:

11 176

代码: 

#include 
#include
#include
#include
#include
#include
using namespace std;struct st { int dw,id,sc; };int main(){ int n,i,j,a[10000]={0}; cin>>n; st s[n+2]; for(i=0;i
max) { max=a[i];t=i; } } cout<
<<" "<

1048 数字加密

分数 20

作者 CHEN, Yue

单位 浙江大学

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118

代码: 

#include
#include
#include
using namespace std;int main(){ string p, q; int a[200]; cin >> p>> q; reverse(p.begin(), p.end()); reverse(q.begin(), q.end()); if (p.size() > q.size()) q.append(p.size() - q.size(), '0'); else if(p.size() < q.size()) p.append(q.size() - p.size(), '0'); int A, B; for (int i = 0; i < p.length(); i++) { A = p[i] - '0'; B = q[i] - '0'; if (i % 2 == 0) { a[i] = (A + B) % 13; } else { a[i] = (B - A + 10) % 10; } } for (int i = p.length() - 1; i >= 0; i--) { if (a[i] == 10) cout << "J"; else if (a[i] == 11) cout << "Q"; else if (a[i] == 12) cout << "K"; else cout << a[i]; }}

1049 数列的片段和

分数 20

作者 CAO, Peng

单位 Google

给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这 10 个片段。

给定正整数数列,求出全部片段包含的所有的数之和。如本例中 10 个片段总和是 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。

输入格式:

输入第一行给出一个不超过 105 的正整数 N,表示数列中数的个数,第二行给出 N 个不超过 1.0 的正数,是数列中的数,其间以一个空格分隔。

输出格式:

在一行中输出该序列所有片段包含的数之和,精确到小数点后 2 位。

输入样例:

40.1 0.2 0.3 0.4

输出样例:

5.00

感谢 Ruihan Zheng 对测试数据的修正。

代码: 

#include 
#include
#include
#include
#include
#include
using namespace std;int main(){ long long int n,i,j; vector
v; long double sum=0,a; cin>>n; for(i=1;i<=n;i++) { cin>>a; v.push_back(a); sum+=a*(n-i+1)*i; } printf("%.2llf",sum); return 0;}

 1050 螺旋矩阵

分数 25

作者 CHEN, Yue

单位 浙江大学

本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。

输入格式:

输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 104,相邻数字以空格分隔。

输出格式:

输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。

输入样例:

1237 76 20 98 76 42 53 95 60 81 58 93

输出样例:

98 95 9342 37 8153 20 7658 60 76

代码: 

#include 
#include
#include
#include
#include
#include
using namespace std;int main(){ int N,i,j; cin>>N; int m,n,a[N+2]; for(i=sqrt(N);i>=1;i--) { for(j=sqrt(N);j<=N+10;j++){ if(i*j==N) { m=i;n=j;goto end; } } }end:{} int c[n+2][m+2],b[n+2][m+2]; for(i=0;i
>a[i]; } sort(a,a+N,greater
()); int k=0; for(int i=0;i<=n;i++){ for(int j=0;j<=m;j++){ c[i][j]=0; } } i=0;j=0; int x=0,y=0; while(k
=0 &&c[x][y]==0){ c[x][y]=1; b[x][y--]=a[k++]; }y++;x--; while(x>=0 &&c[x][y]==0){ c[x][y]=1; b[x--][y]=a[k++]; }x++;y++; } for(i=0;i

上一篇:PAT (Basic Level) Practice 乙级1051-1055
下一篇:PAT (Basic Level) Practice 乙级1041-1045

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月13日 12时47分39秒