PAT-B 1026 程序運行時間
AC代碼
#include<iostream>
using namespace std;
int main(){
int c1,c2,clk=100;
cin>>c1>>c2;
float time=(c2-c1)*1.0/clk;//以秒爲單位
int hour,min,second;
hour=time/3600;
min=(int)(time/60)%60;
second=(int)time%60;
if(time-(int)time>=0.5) second++;
printf("%02d:%02d:%02d",hour,min,second);
return 0;
}
PAT-B 1027 打印沙漏
思路:定義數組v存儲每行的奇數,控制輸出字符與空格即可。
AC代碼
#include<iostream>
#include<vector>
using namespace std;
int main(){
int N; char c;
cin>>N>>c;
int sum=(N+1)/2,n=0;//sum單次總共的奇數
vector<int> v;
for(int i=1;n+i<=sum;i+=2) {
if(n<sum) {
v.push_back(i);
n+=i;
}
}
for(int i=v.size()-1;i>=0;i--) {
for(int j=i;j<v.size()-1;j++) cout<<" ";
for(int j=0;j<v[i];j++) cout<<c;
cout<<endl;
}
for(int i=1;i<v.size();i++) {
for(int j=i;j<v.size()-1;j++) cout<<" ";
for(int j=0;j<v[i];j++) cout<<c;
cout<<endl;
}
cout<<N-(n*2-1);
return 0;
}
PAT-B 1028 人口普查
廢話:本來看見題目慣性思維,定義一個結構體,後來發現輸出不用涉及存儲結構體 完全沒必要 這題真的不難想 但真的是調試了半天 就在於起初就想要用結構體 快寫完了 寫輸出的時候發現根本不用 又回去改代碼
注1:主要注意年齡大於200以及未出生的 條件即可
AC代碼
#include<iostream>
using namespace std;
int main(){
int N,maxy=-1,maxm,maxd,miny=9999,minm,mind,sum=0;
cin>>N;
string smax,smin;
for(int i=0;i<N;i++) {
getchar();
string n; int y,m,d;
cin>>n;
scanf("%d/%d/%d",&y,&m,&d);
if(y<1814||(y==1814&&(m<9||(m==9&&d<6)))) continue;//年齡大於200
if(y>2014||(y==2014&&(m>9||(m==9&&d>6)))) continue;//未出生
sum++;
if(y<miny||(y==miny&&(m<minm||(m==minm&&d<mind)))) {
miny=y; minm=m;mind=d;
smin=n;
}
if(y>maxy||(y==maxy&&(m>maxm||(m==maxm&&d>maxd)))) {
maxy=y; maxm=m;maxd=d;
smax=n;
}
}
if(sum!=0) cout<<sum<<" "<<smin<<" "<<smax;
else cout<<sum<<endl;//測試點3
return 0;
}
PAT-B 1029 舊鍵盤
思路:
step1:定義一個acsii的數組,數組下標對應字符的ASCII值,初始化爲0,若其值爲1則證明,該字符在之前已經判斷過了;
step2:同時循環判斷兩個字符串str1(循環變量i)與str2(循環變量j),若str1[i]!=str[j]&&ascii[str1[i]]==0 說明該字符鍵盤壞了且使第一次判斷 將值存入數組v中 且更改相應ascii值(大小寫都要更改)
step3:輸出數組v
AC代碼
#include<iostream>
#include<cctype>
#include<vector>
#include<cstring>
using namespace std;
int main(){
string str1,str2;
cin>>str1>>str2;
vector<char> v;
int ascii[128]={0};
for(int i=0,j=0;i<str1.length();i++){
if(str1[i]==str2[j]){
j++;
continue;
}
if(str1[i]!=str2[j]&&ascii[str1[i]]==0){
if(isdigit(str1[i])) v.push_back(str1[i]);
else if(islower(str1[i])){
ascii[toupper(str1[i])]=1;
v.push_back(toupper(str1[i]));
}
else {
ascii[tolower(str1[i])]=1;
v.push_back(str1[i]);
}
ascii[str1[i]]=1;
}
}
for(int i=0;i<v.size();i++) cout<<v[i];
return 0;
}
PAT-B 1030 完美數列
AC代碼
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int N; long long int p;
cin>>N>>p;
vector<int> v(N);
for(int i=0;i<N;i++) cin>>v[i];
sort(v.begin(),v.end());
int len,maxlen=0;
for(int i=0;i<v.size();i++){
for(int j=i+maxlen;j<v.size();j++){
if(v[j]<=v[i]*p){
len=j-i+1;
if(len>maxlen) maxlen=len;
} else break;
}
}
cout<<maxlen;
return 0;
}