欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

PAT乙级练习

程序员文章站 2022-03-27 17:04:42
PATPATPAT乙级练习前言:预计一个月内刷完乙级所有题,主要记录下比较坑的题,水题就不写了,有点意思的写下代码。1026 程序运行时间唯一坑点 除以100后要四舍五入到个位。即b=(int)((double)b/100.0+0.5)b=(int)((double)b/100.0+0.5)b=(int)((double)b/100.0+0.5)......

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

相关标签: PAT