PAT-B 1016~1020 C++

PAT-B 1016 部分A+B
AC代碼

#include<iostream>
using namespace std;
int main()
{
	string A,B;//有可能超出int範圍 用string
	int da,db;
	cin>>A>>da>>B>>db;
	int pa=0,pb=0;
	for(int i=0;i<A.size();i++){
		if(A[i]-'0'==da) pa=pa*10+da;		
	}		
	for(int j=0;j<B.size();j++){
		if(B[j]-'0'==db) pb=pb*10+db;
	}
	cout<<pa+pb<<endl;	
	return 0;
} 

PAT-B 1017 A除以B
AC代碼

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	string A;
	int B,Q=0,R=0,flag=0;
	cin>>A>>B;
	for(int i=0;i<A.length();i++){
		R=R*10+(A[i]-'0');//當前被除數 也就是餘數 
		Q=R/B;//當前每一位商 
		R=R%B;//當前餘數
		if(Q>0) flag=1;//去除前導0
		if(flag) cout<<Q;//輸出每一位商 
	}
	if(flag==0) cout<<"0";
	cout<<" "<<R; 
	return 0;
}

PAT-B 1018 剪刀錘子布
廢話:這道題 真的要被自己蠢~~ 本來思路挺簡單的 非得要弄的複雜點 ~
AC代碼

#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
int main(){
	int N,win1=0,win2=0,p=0;//win1甲勝次數 p平局次數 
	cin>>N;
	int A[3]={0},B[3]={0}; 
	while(N--){
		getchar();
		char a,b;
		cin>>a>>b;
		if(a==b) p++;
		else{
			if(a=='C'&&b=='J') { A[1]++; win1++; }
			if(a=='J'&&b=='B') { A[2]++; win1++; }
			if(a=='B'&&b=='C') { A[0]++; win1++; }
			if(a=='J'&&b=='C') { B[1]++; win2++; }
			if(a=='B'&&b=='J') { B[2]++; win2++; }
			if(a=='C'&&b=='B') { B[0]++; win2++; }
		}
	}
	cout<<win1<<" "<<p<<" "<<win2<<endl;
	cout<<win2<<" "<<p<<" "<<win1<<endl;
	int max1,max2;
	max1=max(A[0],A[1]); max1=max(max1,A[2]);
	max2=max(B[0],B[1]); max2=max(max2,B[2]);
	char s[3]={'B','C','J'};
	for(int i=0;i<3;i++){
		if(A[i]==max1) {
			cout<<s[i]<<" ";
			break;
		}
	}
	for(int i=0;i<3;i++){
		if(B[i]==max2) {
			cout<<s[i];
			break;
		}
	} 
	return 0;
}

PAT-B 1019 數字黑洞
廢話:起初用了兩個vector< int >,一個正序,一個反序,結果運行超時,再後來,其實根本就是一個數組,一個正着來一個反着來,不明白自己剛開始爲什麼不好好審題, 非得要寫了遍出錯了 才知道看看有沒有更優的 再一遍看題時 就要思考到 一個數組就行
AC代碼

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
	vector<int> v;
	string N;
	cin>>N;
	for(int i=0;i<4;i++){
		if(i<N.length()) v.push_back(N[i]-'0');
		else v.push_back(0);
	} 
	sort(v.begin(),v.end());//從小到大 
	if(v[0]==v[3]){//排序後 首末位相等則每位數字均相等 
		cout<<N<<" - "<<N<<" = 0000";
		return 0;
	} 
	int n=0;
	do{
		int n1=v[3]*1000+v[2]*100+v[1]*10+v[0];
		int n2=v[0]*1000+v[1]*100+v[2]*10+v[3];
		n=n1-n2;
		printf("%04d - %04d = %04d\n",n1,n2,n);
		v[0]=n/1000;
		v[1]=(n/100)%10;
		v[2]=(n/10)%10;
		v[3]=n%10;
		sort(v.begin(),v.end());
	}while(n!=6174);
	return 0;
} 

PAT-B 1020 月餅
思路:定義Moon結構體表示每種月餅,其中包括單價,按單價高低降序排序,i從0~N遍歷每一種月餅,判斷當前月餅庫存量是否滿足需求量,若是利潤加上當前月餅售價且需求量減去庫總量,反之,用利潤+單價*當前需求量且需求量爲0.
注1:這裏,之所以可以讓需求量爲0,是因爲如果當前月餅庫存量不滿足需求量,則說明當前需求較小,只需要一部分即可,因此,當計算完利潤後,就已經沒有了需求量,即需求量爲0.
AC代碼

#include<iostream>
#include<algorithm>
using namespace std;
struct Moon{//分別是庫存量 總售價 單價 
	float knum=0.0,sum=0.0,p=0.0;
};
bool cmp(Moon m1, Moon m2){
	return m1.p>=m2.p;
}
int main(){
	int N,D;
	cin>>N>>D;
	Moon m[N];
	for(int i=0;i<N;i++) cin>>m[i].knum;
	for(int i=0;i<N;i++){
		cin>>m[i].sum;
		m[i].p=m[i].sum*1.0/m[i].knum;
	}
	sort(m,m+N,cmp);//按單價從高到低排序 
	float profit=0.0;
	for(int i=0;D!=0&&i<N;i++){
		if(D>=m[i].knum){
			profit+=m[i].sum;
			D=D-m[i].knum;
		} 
		else {
			profit+=m[i].p*D;
			D=0;
		} 
	}
	printf("%.2f",profit);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章