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