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;
}