0
点赞
收藏
分享

微信扫一扫

PAT (Basic Level) Practice 题解代码(持续更新)

爱奔跑的读书者 2022-01-12 阅读 71
算法c++

PAT

(Basic Level) Practice

1001-1110(已更新至最新)

1001-1100

链接:https://pan.baidu.com/s/1Zs7rZn_Z3fyARkwUusviJA
提取码:xkyq

1101-1110

链接:https://pan.baidu.com/s/1hR8bLuuWiDYb2z9XnRxpOQ
提取码:c2yj

1001 卡拉兹(Callatz)(3n+1)猜想 (15 分)

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	cin >> n;
	int step = 0 ;
	while(n!=1){
		if(n % 2 == 0){
			n = n / 2;
		}else{
			n = 3 * n + 1;
			n = n / 2;
		}
		step++;
	}
	cout << step << endl;
	return 0;
} 

1002 写出这个数 (20 分)

#include<bits/stdc++.h>
using namespace std;

int main(){
	string s;
	cin >> s;
	int total = 0;
	for(int i=0;i<s.size();i++){
		total += s[i] - '0';
	} 
	int a[3];
	bool flag = false;
	a[0] = total / 100;
	a[1] = total / 10 % 10;
	a[2] = total % 10;
	if(a[0]==0 && a[1]!=0){
		a[0] = -1;
	}else if(a[0]==0 && a[1]==0){
		a[0] = -1;
		a[1] = -1;
	}
	for(int i=0;i<3;i++){
		switch(a[i]){
			case 0:cout << "ling";break;
			case 1:cout << "yi";break; 
			case 2:cout << "er";break;
			case 3:cout <<"san";break;
			case 4:cout <<"si";break;
			case 5:cout <<"wu";break;
			case 6:cout <<"liu";break;
			case 7:cout <<"qi";break;
			case 8:cout <<"ba";break;
			case 9:cout <<"jiu";break;
			default:break;
		}
		if(i==2){
			
		}else{
			if(a[i]==-1){
				
			}else{
				cout <<" ";
			}
		}
	}
	
	return 0;
}

1003 我要通过! (20 分)

#include<bits/stdc++.h>
using namespace std;
int isPTA(string s){
	int flag = 1;
	for(int i=0;i<s.size();i++){
		if(s[i] == 'P' || s[i] == 'A' || s[i] == 'T'){
			continue;
		}else{
			flag = 0;
			break;
		}
	}
	return flag;
}

int isR2(string s){
	int site;
	for(int i=0;i<s.size();i++){
		if(s[i] == 'P'){
			site = i;
			break;
		}else if(s[i]!='A'){
			return 0;
		}
	}
	
	if(s[site] == 'P' && s[site+1] == 'A' && s[site+2] == 'T'){
		
	}else{
		return 0;
	}
	
	if(s.size()-site-3!=site){
		return 0;
	}
	
	for(int i=site+3;i<s.size();i++){
		if(s[i]!='A'){
			return 0;
		}
	}
	return 1;
}

int isR3(string s){
	int site1;
	int site2;
	int cnt = 0;
	for(int i=0;i<s.size();i++){
		if(s[i] == 'P'){
			site1 = i;
			break;
		}else if(s[i]!='A'){
			return 0;
		}
	}
    
	for(int i=site1+1;i<s.size();i++){
		if(s[i] == 'T'){
			site2 = i;
			break;
		}else if(s[i] =='A'){
			cnt++;
		}else{
			return 0;
		} 
	}
	if(!cnt){
		return 0;
	}else{
		site1 *= cnt;
	}
	
	if(s.size()-1-site2!=site1){
		return 0;
	}
	
	for(int i=site2+1;i<s.size();i++){
		if(s[i]!='A'){
			return 0;
		}
	}
	
	return 1;
}
int main(){
	int n;
	cin >> n;
	for(int i=0;i<n;i++){
		string s;
		cin >> s;
		int f1 = isPTA(s);
		int f2,f3;
		if(f1){
			f2 = isR2(s);
			f3 = isR3(s);
			if(f2 || f3){
				cout << "YES" << endl;
			}else{
				cout << "NO" << endl;
			}
		}else{
			cout << "NO" << endl;
		}
	}
	
	return 0;
}

1004 成绩排名 (20 分)

#include<bits/stdc++.h>
using namespace std;
typedef struct score{
	char name[15];
	char classname[15];
	int scorenum;
}score;
int n;
bool cmp(score s1,score s2){
	if(s1.scorenum>s2.scorenum){
		return true;
	}else{
		return false;
	}
}

int main(){
	cin >> n;
	score s[n];
	for(int i=0;i<n;i++){
		cin >> s[i].name >> s[i].classname >> s[i].scorenum;
	} 
	sort(s,s+n,cmp);
	cout << s[0].name << " " << s[0].classname<<endl;
	cout << s[n-1].name << " " << s[n-1].classname << endl;
	return 0;
}

1005 继续(3n+1)猜想 (25 分)

#include<bits/stdc++.h>
using namespace std;
int K;
int a[105];
int b[10005];

int main(){
	cin >> K;
	for(int i=0;i<K;i++){
		cin >> a[i];
	}
	for(int i=0;i<K;i++){
		int num = a[i];
		while(num!=1){
			if(num % 2 == 1){
				num = num*3 +1;
				num = num /2 ;
			}else{
				num = num / 2;
			}
			if(b[num]==1){
				break;
			}else{
				b[num] = 1;
			}
		}
	}
	sort(a,a+K);
	bool flag = false;
	for(int i=K-1;i>=0;i--){
		//cout << a[i] << endl;
		if(b[a[i]]==0){
			if(flag == true){
				cout << " ";
			}
			cout << a[i];
			flag = true;
		}
	}
	return 0;
} 

1006 换个格式输出整数 (15 分)

#include<bits/stdc++.h>
using namespace std;

int main(){
	int N;
	cin >> N;
	int b = N /100;
	int s = (N/10) % 10;
	for(int i=0;i<b;i++){
		cout <<"B";
	}
	for(int i=0;i<s;i++){
		cout << "S";
	}
	int g = N % 10;
	for(int i=1;i<=g;i++){
		cout << i;
	}
	cout << endl;
	return 0;
} 

1007 素数对猜想 (20 分)

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int a[maxn]={1,1,0};
int N;
int b[maxn];

int main(){
	cin >> N;
	for(int i=2;i<=N;i++){
		if(!a[i]){
			for(int j=2*i;j<=N;j+=i){
				a[j] = 1;
			}	
		}
	}	
	int count = 0;
	for(int i=0;i<=N;i++){
		if(!a[i]){
			b[count++] = i;
		}
	}
	
	int result = 0;
	for(int i=0;i<count-1;i++){
		if(b[i+1]-b[i]==2){
			result++;
		}
	}
	cout << result << endl;
	return 0;
}

1008 数组元素循环右移问题 (20 分)

#include<bits/stdc++.h>
using namespace std;
int N,M;

int main(){
	cin >> N >> M;
	M = M % N;
	int a[N];
	for(int i=0;i<N;i++){
		cin >> a[i];
	}
	for(int i=0;i<N;i++){
		if(i!=N-1){
			cout << a[(N-M+i)%N] <<" ";
		}else{
			cout << a[(N-M+i)%N] << endl;
		}
	}
	return 0;
} 

1009 说反话 (20 分)

#include<bits/stdc++.h>
using namespace std;
string s[100];

int main(){
	int j = 0;
	while((cin >> s[j])){
		j++; 
	}
	for(int i=j-1;i>=0;i--){
		if(i!=0){
			cout << s[i] << " ";	
		}else{
			cout << s[i] <<endl;
		}
	}	
	return 0;
}

1010 一元多项式求导 (25 分)

#include<bits/stdc++.h>
using namespace std;


int main(){
	int a,b;
	int j = 0;
	while((cin >> a && cin >> b)){
		if(j == 0 && b!=0){
			cout << a*b << " " << b-1;
		}else if(j==0 && b==0){
			cout << "0 0" << endl;
			break;
		}else if(j!=0 && b==0){
			break;
		}else if (j!=0 && b!=0){
			cout << " " << a*b << " " << b-1;
		}
		j++;
	}
	
	return 0;
} 
举报

相关推荐

0 条评论