PAT练习(一)

1011B A+B 和 C

https://pintia.cn/problem-sets/994805260223102976/problems/994805312417021952

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int time;
	cin>>time;
	long long a,b,c;
	for(int i =0;i<time;i++){
		scanf("%lld%lld%lld",&a,&b,&c);
		if(a+b>c){
			printf("Case #%d: true\n",i+1);
		}
		else
			printf("Case #%d: false\n",i+1);
	}
	return 0;
} 

1016B 部分A+B (15 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805306310115328

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	long long a,da,b,db;
	scanf("%lld%lld%lld%lld",&a,&da,&b,&db);
	long long pa=0,pb=0;
	while(a!=0){
		if(a%10 == da)
			pa = pa*10+da;
		a = a/10;
	}
	while(b!=0){
		if(b%10 == db)
			pb = pb*10+db;
		b = b/10;
	}
	printf("%lld",pa+pb);
	return 0;
}

1026B 程序运行时间 (15 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805295203598336

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int c1,c2;
	cin>>c1>>c2;
	int c = (c2-c1)/100;
	if(c%100>50)
		c = c+1;
	printf("%02d:%02d:%02d\n",c/3600,c%3600/60,c%60); 
	return 0;
} 

B1046 划拳 (15 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805277847568384

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int a,ha,b,hb;
	int cnt;
	cin>>cnt;
	int pa=0,pb=0;
	while(cnt--){
		cin>>a>>ha>>b>>hb;
		if(ha == a+b&&ha !=hb){
			pb=pb+1;
		}
		if(hb == a+b&&ha !=hb)
			pa=pa+1;
		
	}
	cout<<pa<<" "<<pb;
	return 0; 
} 

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

https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808

部分错误。17分

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	m = m%n;
	int num[110]={0};
	for(int i =0;i<n;i++){
		cin>>num[i];
	}
	if(n ==1){
		cout<<num[0]<<endl;
	}
	else if(m ==0){
		cout<<num[0];
		for(int i =1;i<m;i++){
			cout<<" "<<num[i];
		}
	}
	else{
		cout<<num[n-m];
		for(int i = n-m+1;i<n;i++){
			cout<<" "<<num[i];
		}
		for(int i =0;i<n-m;i++){
			cout<<" "<<num[i];
		}
	}
	return 0;
} 
在这里插入代码片

1012B

https://pintia.cn/problem-sets/994805260223102976/problems/994805311146147840

19分,一个答案错误

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int num[1010]={0};
	for(int i=0;i<n;i++){
		cin>>num[i];
	}
	int cnt[5]={0};
	int tag=1;
	int count=0;
	for(int i =0;i<n;i++){
		if(num[i]%5==0&&num[i]%2==0){
			cnt[0] = cnt[0]+num[i];
		}
		if(num[i]%5 == 1){
			cnt[1]=cnt[1]+tag*num[i];
			tag = tag*(-1);
		}
		if(num[i]%5==2){
			cnt[2]++;
		}
		if(num[i]%5==3){
			cnt[3]=cnt[3]+num[i];
			count=count+1;
		}
		if(num[i]%5==4){
			if(cnt[4]<num[i]){
				cnt[4]=num[i];
			}
		} 
	}
	
	if(cnt[0]==0) printf("N ");
	else printf("%d ",cnt[0]);
	if(cnt[1]==0) printf("N ");
	else printf("%d ",cnt[1]);
	if(cnt[2]==0) printf("N ");
	else printf("%d ",cnt[2]);	
	if(cnt[3]==0) printf("N ");
	else printf("%.1f ",(double)cnt[3]/count);
	if(cnt[4]==0) printf("N ");
	else printf("%d ",cnt[4]);
	return 0;
} 

修改,存在只有一个数字为0的情况时,无法分别

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int num[1010]={0};
	for(int i=0;i<n;i++){
		cin>>num[i];
	}
	int cnt[5]={0};
	int tag=1;
	int count[5]={0};
	for(int i =0;i<n;i++){
		if(num[i]%5==0&&num[i]%2==0){
			cnt[0] = cnt[0]+num[i];
			count[0]++;
		}
		if(num[i]%5 == 1){
			cnt[1]=cnt[1]+tag*num[i];
			tag = tag*(-1);
			count[1]++;
		}
		if(num[i]%5==2){
			cnt[2]++;
			count[2]++;
		}
		if(num[i]%5==3){
			cnt[3]=cnt[3]+num[i];
			count[3]++;
		}
		if(num[i]%5==4){
			if(cnt[4]<num[i]){
				cnt[4]=num[i];
				count[4]++;
			}
		} 
	}
	
	if(count[0]==0) printf("N ");
	else printf("%d ",cnt[0]);
	if(count[1]==0) printf("N ");
	else printf("%d ",cnt[1]);
	if(count[2]==0) printf("N ");
	else printf("%d ",cnt[2]);	
	if(count[3]==0) printf("N ");
	else printf("%.1f ",(double)cnt[3]/count[3]);
	if(count[4]==0) printf("N");
	else printf("%d",cnt[4]);
	return 0;
} 

1018B

https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344

#include<cstdio>
#include<iostream>
using namespace std;
int change(char c){
	if(c=='B')
		return 0;
	else if(c=='C')
		return 1;
	else return 2;
}

int main(){
	int n;
	cin>>n;
	char mp[3]={'B','C','J'};
	//胜中负次数 
	int t1[3]={0},t2[3]={0};
	//出拳内容胜的次数 
	int h1[3]={0},h2[3]={0};
	int a,b;
	char c1,c2;
	for(int i =0;i<n;i++){
		cin>>c1>>c2;
		a = change(c1);
		b = change(c2);
		h1[a]++;
		h2[b]++;
		if((a+1)%3==b){
			t1[0]++;
			t2[2]++;
			h1[a]++; 
		}
		else if((b+1)%3==a){
			t1[2]++;
			t2[0]++;
			h2[b]++;
		}
		else{
			t1[1]++;
			t2[1]++;
		}
	}
	printf("%d %d %d\n",t1[0],t1[1],t1[2]);
	printf("%d %d %d\n",t2[0],t2[1],t2[2]);
	int id1=0,id2=0;
	for(int i =0;i<3;i++){
		if(h1[i]>h1[id1]) id1=i;
		if(h2[i]>h2[id2]) id2=i;
	}
	printf("%c %c\n",mp[id1],mp[id2]);
	return 0;
}

1042A Shuffling Machine (20 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805442671132672
答案错误,报错,主要原因,输出数字用start[i]%13,导致应该显示为13的位置显示0

#include<cstdio>
#include<iostream>
using namespace std;
const int N=54;
char mp[5]={'S','H','C','D','J'};
int start[N+1]={0},next[N+1]={0},end[N+1]={0}; 
int main(){
	int n;
	cin>>n;
	//初始化 
	for(int i =1;i<=54;i++){
		start[i]=i;
	}
	//输入每个位置上的牌操作后的位置
	for(int i =1;i<=N;i++){
		cin>>next[i];
	} 
	//进行洗牌
	for(int i =0;i<n;i++){
		for(int j = 1;j<=N;j++){
			end[next[j]] = start[j];
		}
		for(int j =1;j<=N;j++){
			start[j]=end[j];
		}
	}
	for(int i=1;i<=N;i++){
		if(i!=1) cout<<" ";
		printf("%c%d",mp[(start[i]-1)/13],start[i]%13);
	} 
	return 0;
} 

printf("%c%d",mp[(start[i]-1)/13],start[i]%13);改为在输出之前start[i]–printf("%c%d",mp[start[i]/13],start[i]%13+1);

#include<cstdio>
#include<iostream>
using namespace std;
const int N=54;

int main(){
	int n;
	char mp[5]={'S','H','C','D','J'};
	int start[N+1]={0},next[N+1]={0},end[N+1]={0}; 
	cin>>n;
	//初始化 
	for(int i =1;i<=54;i++){
		start[i]=i;
	}
	//输入每个位置上的牌操作后的位置
	for(int i =1;i<=N;i++){
		cin>>next[i];
	} 
	//进行洗牌
	for(int i =0;i<n;i++){
		for(int j = 1;j<=N;j++){
			end[next[j]] = start[j];
		}
		for(int j =1;j<=N;j++){
			start[j]=end[j];
		}
	}
	for(int i=1;i<=N;i++){
		if(i!=1) cout<<" ";
		start[i]--;
		printf("%c%d",mp[start[i]/13],start[i]%13+1);
	} 
	return 0;
} 

1046A Shortest Distance (20 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805435700199424

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
	int n;
	cin>>n; 
	int dis[10010]={0};
	int sum=0;
	for(int i=1;i<=n;i++){
		int a;
		cin>>a;
		sum = sum+a;
		dis[i]=sum;
	}
	int j=0;
	cin>>j;
	for(int i=0;i<j;i++){
		int a,b;
		cin>>a>>b;
		if(a>b) swap(a,b);
		int temp=dis[b-1]-dis[a-1];
		printf("%d\n",min(temp,sum-temp));
	}
	return 0;
}

1065A A+B and C (64bit) (20 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805406352654336

尝试用大整数解决,内容太麻烦

解决思路:
a>max,b>max,a+b<0,所以a+b>c
a<0,b<0,a+b>=0,所以a+b<c

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int t;
	cin>>t;
	int i=1;
	while(t--){
		long long a,b,c;
		cin>>a>>b>>c;
		if(a<0&&b<0&&(a+b)>=0){
			printf("Case #%d: false\n",i++);
			continue;
		}
		else if(a>0&&b>0&&(a+b)<0){
			printf("Case #%d: true\n",i++);
			continue;
		}
		else if((a+b)>c){
			printf("Case #%d: true\n",i++);
			continue;
		}
		else {
			printf("Case #%d: false\n",i++);
			continue;
		}
	}
	return 0;
}

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

https://pintia.cn/problem-sets/994805260223102976/problems/994805313708867584

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int a,b;
	cin>>a>>b;
	if(b == 0){
		cout<<"0 0";
		return 0;
	}
	else{
		cout<<a*b<<" "<<b-1;	
	}
	while(cin>>a>>b){
		if(b!=0){
			cout<<" "<<a*b<<" "<<b-1;
		}
	}
	return 0;
} 

1002A A+B for Polynomials (25 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805526272000000

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct User{
	char id[16];
	int in_time[3];
	int out_time[3];
}user[1010];
bool cmp(User u1,User u2){
	if (u1.in_time[0]!=u2.in_time[0]) return u1.in_time[0]<u2.in_time[0]; 
	else if (u1.in_time[1]!=u2.in_time[1]) return u1.in_time[1]<u2.in_time[1];
	else return u1.in_time[2]<u2.in_time[2];  
}
bool cmp1(User u1,User u2){
	if (u1.out_time[0]!=u2.out_time[0]) return u1.out_time[0]>u2.out_time[0]; 
	else if (u1.out_time[1]!=u2.out_time[1]) return u1.out_time[1]>u2.out_time[1];
	else return u1.out_time[2]>u2.out_time[2];  
}
int main(){
	int m;
	cin>>m;
	for(int i=0;i<m;i++){
		scanf("%s %d:%d:%d %d:%d:%d",&user[i].id,&user[i].in_time[0],&user[i].in_time[1],&user[i].in_time[2],&user[i].out_time[0],&user[i].out_time[1],&user[i].out_time[2]);
	}
	sort(user,user+m,cmp);
	cout<<user[0].id<<" ";
	sort(user,user+m,cmp1);
	cout<<user[0].id;
	return 0;
}

1009A Product of Polynomials (25 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805509540921344

#include<iostream>
#include<cstdio>
using namespace std;

int main(){
    double a[1020]={0.0},b[1020]={0.0},temp[2020]={0.0};
    int ka,kb;
    cin>>ka;
    for(int i = 0;i<ka;i++){
        int nk;
        double n;
        cin>>nk>>n;
        a[nk]=n;
    }
    cin>>kb;
    for(int i = 0;i<kb;i++){
        int nk;
        double n;
        cin>>nk>>n;
        b[nk]=n;
    }
    for(int i=0;i<=1000;i++){
        for(int j=0;j<=1000;j++){
            temp[i+j]+=a[i]*b[j];
        }
	}
    int count = 0;
    for(int i=0;i<=2000;i++)
        if(temp[i]!=0.0)
            count++;
    cout<<count;
    for(int i = 2000;i>=0;i--)
        if(temp[i]!=0.0){
            printf(" %d %.1lf",i,temp[i]);
        }
    return 0;
}
发布了43 篇原创文章 · 获赞 4 · 访问量 6137

猜你喜欢

转载自blog.csdn.net/didadu/article/details/98479172