PAT-B 1011~1015

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章