PAT乙级练习
P A T PAT PAT乙级练习
前言:预计一个月内刷完乙级所有题,主要记录下比较坑的题,水题就不写了,有点意思的写下代码。
15分的题:
1026 程序运行时间
唯一坑点 除以100后要四舍五入到个位。
即 b = ( i n t ) ( ( d o u b l e ) b / 100.0 + 0.5 ) b=(int)((double)b/100.0+0.5) b=(int)((double)b/100.0+0.5)
1051 复数乘法
唯一坑点是:当实部或虚部绝对值小于
0.005
0.005
0.005且为负数时,答案会输出
−
0.00
-0.00
−0.00
应该去掉前面的负号。
double x,y;
double tmp=cos(y1)*cos(y2)-sin(y1)*sin(y2);
double tmp1=cos(y1)*sin(y2)+sin(y1)*cos(y2);
tmp1*=x1*x2;
tmp*=x1*x2;
if(fabs(tmp)<0.005) tmp=0;
if(fabs(tmp1)<0.005) tmp1=0;
if(tmp1<0){
printf("%.2f%.2fi\n",tmp,tmp1);
}
else printf("%.2f+%.2fi\n",tmp,tmp1);
1081 检查密码
这个题是有毒吗?题目说的非空字符串,结果数据有空格?用下 g e t l i n e getline getline就解决了。
1086 就不告诉你
唯一坑点:居然不说不需要前导 0 0 0。
以上是 15 15 15分挑出来的一些题目,无算法,唯一需要注意的地方是格式和符号之类的问题。
20分的题:
1003 我要通过!
想了一会,最后发现只用讨论两种情况。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
#define il inline
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
string a;
cin>>a;
int m=a.size(),f=1,fp=0,fa=0,ft=0;
for(int j=0;j<m;j++){
if(a[j]!='P'&&a[j]!='A'&&a[j]!='T'){
f=0;
break;
}
if(a[j]=='P') fp++;
else if(a[j]=='A') fa++;
else if(a[j]=='T') ft++;
}
if(!f||!fp||!fa||!ft||fp>1||ft>1) {
puts("NO");
continue;
}
char c='A';
int s1=0,s2=0,s3=0,f1=0,f2=0;
for(int j=0;j<m;j++){
if(!f1&&a[j]==c){
s1++;
}
else if(a[j]=='P'){
f1=1;
}
else if(!f2&&a[j]==c){
s2++;
}
else if(a[j]=='T'){
f2=1;
}
else if(f1&&f2&&a[j]=='A'){
s3++;
}
}
if((s2==1&&s1==s3)||(s3>=s1&&s1*s2==s3)) puts("YES");
else puts("NO");
}
return 0;
}
1014 福尔摩斯的约会
恶心人的题,没说清楚字符串不一定是满足要求的。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e6+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
#define il inline
string We[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
bool check(char c){
return (c>='a'&&c<='z')||(c>='A'&&c<='Z');
}
bool fun(char c){
return c>='A'&&c<='G';
}
bool fun1(char c){
return c>='A'&&c<='N'||isdigit(c);
}
int main(){
string a,b,c,d;
cin>>a>>b>>c>>d;
int la=a.size(),lb=b.size(),da=-1,h=-1,m=-1;
for(int i=0;i<min(la,lb);i++){
if(da==-1&&a[i]==b[i]&&fun(a[i])){
da=a[i]-'A'+1;
}
else if(h==-1&&da!=-1&&a[i]==b[i]&&fun1(a[i])){
if(isdigit(a[i])) h=a[i]-'0';
else h=a[i]-'A'+10;
}
}
int lc=c.size(),ld=d.size();
for(int i=0;i<min(lc,ld);i++){
if(c[i]==d[i]&&check(c[i])){
m=i;
break;
}
}
cout<<We[da-1]<<" ";
printf("%02d:%02d\n",h,m);
return 0;
}
1017 A除以B
好久没做高精度了,复习一波。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
#define il inline
int c[N];
int main(){
string a;
int b;
cin>>a>>b;
int n=a.size(),p=0;
for(int i=1;i<=n;i++) c[i]=a[i-1]-'0';
for(int i=1;i<=n;i++){
p=p*10+c[i];
c[i]=p/b;
p%=b;
}
int cnt=n,id=1;
while(!c[id]&&id<n) id++;
for(int i=id;i<=n;i++) cout<<c[i];
cout<<" "<<p;
return 0;
}
1018 锤子剪刀布
折磨王的模拟题。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
#define il inline
int n,a,b,c,x,y,z,mx1[3],mx2[3],ch1,ch2;
PII p[3];
bool cmp(PII a,PII b){
return a.fi==b.fi?a.se<b.se:a.fi>b.fi;
}
char fun(int *a){
p[0]={a[0],'C'},p[1]={a[1],'J'},p[2]={a[2],'B'};
sort(p,p+3,cmp);
return p[0].se;
}
int main(){
cin>>n;
while(n--){
char ch1,ch2;
cin>>ch1>>ch2;
if(ch1==ch2) b++,y++;
else if(ch1=='C'&&ch2=='J') a++,z++,mx1[0]++;
else if(ch1=='J'&&ch2=='B') a++,z++,mx1[1]++;
else if(ch1=='B'&&ch2=='C') a++,z++,mx1[2]++;
else {
if(ch2=='C') mx2[0]++;
else if(ch2=='J') mx2[1]++;
else if(ch2=='B') mx2[2]++;
c++,x++;
}
}
printf("%d %d %d\n%d %d %d\n",a,b,c,x,y,z);
printf("%c %c\n",fun(mx1),fun(mx2));
return 0;
}
1022 D进制的A+B
唯一坑点:和为 0 0 0,只用输出 0 0 0即可。
本文地址:https://blog.csdn.net/weixin_45750972/article/details/108569143