2:30h ~~~ 用時太長 卡了半天
PAT-B 1010 A+B和C
沒什麼好說的
AC代碼
#include<iostream>
using namespace std;
int main(){
int T;
cin>>T;
for(int i=0;i<T;i++){
long int A,B,C;
cin>>A>>B>>C;
cout<<"Case #"<<i+1<<": ";
if(A+B>C) cout<<"true"<<endl;
else cout<<"false"<<endl;
}
return 0;
}
PAT-B 1012 數字分類
注1:對于A2題目是交錯求和,有可能和為0,不能直接用和是否等于0來判斷其和是否存在。如:輸入 2 6 6 兩個數都是6對5取餘都是1,符合A2條件,交錯求和sum=6-6=0 其和是0(不能輸出N)
注2(自己真的特蠢):A5要求,取餘4的最大數,然後定義a5=-1,但是最後自己卻用a5==0來判斷輸出N ,蠢到家了,本來定義的是-1啊不是0,後來改了0
AC代碼
#include<iostream>
using namespace std;
int main(){
int N,a1=0,a2=0,num2=0,cnt=1,a3=0,a4=0,num4=0,a5=0;
cin>>N;
for(int i=0;i<N;i++){
int n;cin>>n;
if(n%5==0) {
if(n%2==0) a1+=n;
}
else if(n%5==1) {
a2+=cnt*n;
cnt=(-1)*cnt;
num2++;
} else if(n%5==2) a3++;
else if(n%5==3) {
a4+=n;
num4++;
} else {
if(n>a5) a5=n;
}
}
if(a1==0) cout<<"N"; else cout<<a1;
if(num2==0) cout<<" N"; else cout<<" "<<a2;
if(a3==0) cout<<" N"; else cout<<" "<<a3;
if(num4==0) cout<<" N"; else printf(" %.1f",a4*1.0/num4);
if(a5==0) cout<<" N"; else cout<<" "<<a5;
return 0;
}
PAT-B 1013 數素數
思路:直接找出10000個素數,存入數組,然後輸出第M到N個
AC代碼
#include<iostream>
#include<vector>
using namespace std;
bool isPrime(int num){
for(int i=2;i*i<=num;i++){
if(num%i==0) return false;
}
return true;
}
int main(){
int M,N,num=2,flag=0,cnt=0;
cin>>M>>N;
vector<int> v;
while(v.size()<=10000){
if(isPrime(num)) v.push_back(num);
num++;
}
for(int i=M;i<=N;i++){
if(cnt==10){
flag=0;
cnt=0;
cout<<endl;
}
if(flag) cout<<" ";
cout<<v[i-1];
flag=1;
cnt++;
}
return 0;
}
PAT-B 1014 福爾摩斯的約會
廢話:這道題也是卡了半天,最後出錯的結果也是令人無語。看題,星期幾與第幾個鐘頭都是大寫字母,就用isupper()判斷了,但是測試2與4一直過不去,就上網搜尋,基本上都是說這裡是判斷大寫字母,然後我就感覺自己寫的沒問題啊,我是在判斷大寫字母呀。找了好久。最後,反複看題目描述對應代碼,才發現一個問題 題目描述中 要求星期幾是大寫字母A~G 根本不是所有的大寫字母 用isupper 隻能判斷是不是大寫字母 同理 第幾個鐘頭也是類似
注1(測點2):星期幾隻能是從A~G中的大寫字母 其他大寫字母不行
注2(測點4):第幾個鐘頭隻能是0~9或者A ~N中的大寫字母 其他字元均不行
切忌這裡不能直接用isypper()函數
AC代碼
#include<iostream>
#include<cstring>
#include<cctype>
using namespace std;
int main(){
string day[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
string str1,str2,str3,str4;
cin>>str1>>str2>>str3>>str4;
int i=0,j=0;
while(1){
if(isupper(str1[i])&&(str1[i]>='A'&&str1[i]<='G')) break;
i++;
}
cout<<day[str1[i]-'A']<<" ";
i++;
while(1){
if(((str1[i]>='A'&&str1[i]<='N')||isdigit(str1[i]))&&str1[i]==str2[i]) break;
i++;
}
if(isupper(str1[i])) cout<<str1[i]-'A'+10<<":";
else cout<<"0"<<str1[i]<<":";
while(1){
if(isalpha(str3[j])&&str3[j]==str4[j]) break;
j++;
}
printf("%02d",j);
return 0;
}
PAT-B 1015 德才論
廢話:起初同了4個vector< Stu >,分别排序輸出 但是運作逾時 将其定義為1個vector< Stu> v(4) 就不逾時了。這點同樣 讓我找了半天 一直感覺思路挺對的呀
AC代碼
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct Stu{
int id,d,c,sum;//分别表示準考證号 德分 才分 總分
};
bool cmp(Stu a, Stu b){
if(a.sum!=b.sum) return a.sum>b.sum;
else if(a.d!=b.d) return a.d>b.d;
else return a.id<b.id;
}
int main(){
int N,L,H;
cin>>N>>L>>H;
vector<Stu> v[4];
for(int i=0;i<N;i++){
Stu s;
cin>>s.id>>s.d>>s.c;
s.sum=s.d+s.c;
if(s.d>=H&&s.c>=H) {v[0].push_back(s); continue;}
if(s.d>=H&&s.c<H&&s.c>=L) {v[1].push_back(s); continue;}
if(s.d<H&&s.c<H&&s.d>=L&&s.c>=L&&s.d>=s.c) {v[2].push_back(s); continue;}
if(s.d>=L&&s.c>=L) v[3].push_back(s);
}
cout<<v[0].size()+v[1].size()+v[2].size()+v[3].size()<<endl;
for(int i=0;i<4;i++){
sort(v[i].begin(),v[i].end(),cmp);
for(int j=0;j<v[i].size();j++) cout<<v[i][j].id<<" "<<v[i][j].d<<" "<<v[i][j].c<<endl;
}
return 0;
}