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