PAT-B 1036~1040 C++

1.5h 1040卡


PAT-B 1036 跟奥巴马一起编程
注1:注意行数计算 四舍五入
AC代码

#include<iostream>
using namespace std;
int main(){
	int N,lineNum=0;
	char c;
	cin>>N>>c;
	float h=N*1.0/2;
	if(h-(int)h>=0.5) lineNum=(int)h+1;
	else lineNum=(int)h;
	for(int i=0;i<lineNum;i++){
		if(i==0||i==lineNum-1) 
			for(int j=0;j<N;j++) cout<<c;
		else {
			for(int j=0;j<N;j++){
				if(j==0||j==N-1) cout<<c;
				else cout<<" ";
			}
		}
		cout<<endl; 
	}
	return 0;
} 

PAT-B 1037 在霍格沃茨找零钱
注1:其实就是模拟减法 只是第二位数进制是29 第三位数进制是17

#include<iostream>
using namespace std;
int main(){
	int PG,PS,PK,AG,AS,AK,RG,RS,RK;
	scanf("%d.%d.%d %d.%d.%d",&PG,&PS,&PK,&AG,&AS,&AK);
	if(AG>PG||(AG==PG&&(AS>PS||(AS==PS&&AK>PK)))){//实付>应付 
		if(AK>=PK) RK=AK-PK;
		else { RK=AK+29-PK; AS--;}
		if(AS>=PS) RS=AS-PS;
		else { RS=AS+17-PS; AG--;}
		RG=AG-PG;
	} else if(AG==PG&&AS==PS&&AK==PK) RG=RS=RK=0;//最后测试点 
	else{
		cout<<"-";
		if(PK>=AK) RK=PK-AK;
		else { RK=PK+29-AK; PS--;}
		if(PS>=AS) RS=PS-AS;
		else { RS=PS+17-AS; PG--;}
		RG=PG-AG;
	}
	cout<<RG<<"."<<RS<<"."<<RK;
	return 0;
}

PAT-B 1038 统计同成绩学生
注1:第一次用cin cout 最后测试点超时 改成了scanf printf

#include<iostream>
using namespace std;
int main(){
	int N,K;
	cin>>N;
	int grade[101]={0};//下标对应学生成绩 存储成绩人数
	for(int i=0;i<N;i++){
		int g;	
		cin>>g;
		grade[g]++;
	} 
	cin>>K;
	for(int i=0;i<K;i++){
		int gg;
		scanf("%d",&gg);
		if(i!=0) printf(" ");
		printf("%d",grade[gg]);
	}
	return 0;
} 

PAT-B 1039 到底买不买
思路:定义Int型数组ascii 下标就是ASCII值 存储摊主的珠串颜色及个数;循环小红想要的珠串 对比ascii数组 看够不够

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	string str1,str2;
	getline(cin,str1);
	getline(cin,str2);
	int ascii[128]={0};//下标对应字符 存储个数 
	for(int i=0;i<str1.length();i++) ascii[str1[i]]++;
	int num=0;//记录缺失个数 
	for(int i=0;i<str2.length();i++){
		if(ascii[str2[i]]) ascii[str2[i]]--;
		else num++;
	}
	if(num) cout<<"No "<<num;
	else cout<<"Yes "<<str1.length()-str2.length();
	return 0;
}

PAT-B 1040 有几个PAT
这道题自己卡住,思路不对 百度了
分析:由题并不是所有的P的个数A的个数T的个数都可以组成PAT,只有那些仍按PAT顺序排列的个数才是有效的。
这样想要得到PAT的个数,假如现在当前字符是’T’,需要找当前字符前有几个‘PA’能和此’T’组PAT;想要PA个数,要看当前字符’A’前有几个’P’能和此’A’组成PA

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	string s;
	getline(cin,s);
	int num1=0,num2=0,num3=0,i=0;
	while(i<s.length()){
		if(s[i]=='P') num1++;
		if(s[i]=='A') num2=(num1+num2)%1000000007;
		if(s[i]=='T') num3=(num2+num3)%1000000007;
		i++;
	} 
	printf("%d",num3);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值