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;
}