乙级PAT1016-1020答案详解与重要知识点(2021.9.27-2021.10.2)
Posted 不会讲脱口秀的程序员不是好摄影师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乙级PAT1016-1020答案详解与重要知识点(2021.9.27-2021.10.2)相关的知识,希望对你有一定的参考价值。
1016
#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b;
int d1,d2;
int n1,n2;
int p1,p2;
n1=n2=0;
p1=p2=0;
cin>>a>>d1;
cin>>b>>d2;
for(int i=0;i<a.size();i++){
if(a[i]-'0'==d1)
n1++;
}
for(int i=0;i<b.size();i++){
if(b[i]-'0'==d2)
n2++;
}
for(int i=0;i<n1;i++){
p1=p1*10+d1;
}
for(int i=0;i<n2;i++){
p2=p2*10+d2;
}
cout<<p1+p2;
}
1017
#include<bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
//a被除数,b除数,q商,r余数
string a;
vector<int> q;
int b,r=0;
cin>>a;
cin>>b;
int i=0;
if((a[0]-'0')%b==(a[0]-'0')){
r=a[0]-'0';
i=1;
}
for(;i<a.size();i++){
int a1=a[i]-'0'+r*10;
q.push_back(a1/b);
r=a1%b;
}
if(q.empty())
cout<<0;
for(int i=0;i<q.size();i++)
cout<<q[i];
cout<<' '<<r;
return 0;
}
1.大数的除法
先判断大数第一位数能否除以除数,若不能即商为0,则记录该位的余数但不记录(输出)该位的商,
若能除即商不是0,则记录余数并记录(输出)商;
再创建循环将上一位余数作为下一位除法的十位数,此时用容器记录每一位的商(或直接输出商),并记录余数给下一位用。
1018
#include<bits/stdc++.h>
using namespace std;
struct ren{
char ss;
int w=0;
int p=0;
int l=0;
int b=0;
int c=0;
int j=0;
}jia,yi;
int main(int argc, char const *argv[])
{
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>jia.ss>>yi.ss;
if(jia.ss=='B'&&yi.ss=='C'||jia.ss=='C'&&yi.ss=='J'||jia.ss=='J'&&yi.ss=='B'){
jia.w++;
yi.l++;
switch (jia.ss)
{
case 'B':jia.b++;break;
case 'C':jia.c++;break;
case 'J':jia.j++;break;
}
}
else if(yi.ss=='B'&&jia.ss=='C'||yi.ss=='C'&&jia.ss=='J'||yi.ss=='J'&&jia.ss=='B'){
yi.w++;
jia.l++;
switch (yi.ss)
{
case 'B':yi.b++;break;
case 'C':yi.c++;break;
case 'J':yi.j++;break;
}
}
else{
jia.p++;
yi.p++;
}
}
cout<<jia.w<<' '<<jia.p<<' '<<jia.l<<endl;
cout<<yi.w<<' '<<yi.p<<' '<<yi.l<<endl;
if(max(max(jia.b,jia.c),jia.j)==jia.b)
cout<<"B ";
else if(max(max(jia.b,jia.c),jia.j)==jia.c)
cout<<"C ";
else
cout<<"J ";
if(max(max(yi.b,yi.c),yi.j)==yi.b)
cout<<"B";
else if(max(max(yi.b,yi.c),yi.j)==yi.b)
cout<<"C";
else
cout<<"J";
return 0;
}
1.三个数比大小:max(max( ,),)
1019
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){//降序
return a>b;
}
int toNumber(int a[],int l){
int num=0;
for(int i=0;i<l;i++){
num=num*10+a[i];
}
return num;
}
void toArray(int num,int a[],int l){
for(int i=l-1;i>=0;i--){
a[i]=num%10;
num=num/10;
}
}
int main()
{
int array_n[4],n=0;
cin>>n;
toArray(n,array_n,4);
sort(array_n,array_n+4,cmp);
int jx=toNumber(array_n,4);
sort(array_n,array_n+4);
int sx=toNumber(array_n,4);
if(jx-sx==0){
printf("%04d",jx);
cout<<" - ";
printf("%04d",sx);
cout<<" = "<<"0000"<<endl;
}
else{
while(jx-sx!=6174){
printf("%04d",jx);
cout<<" - ";
printf("%04d",sx);
cout<<" = ";
printf("%04d",jx-sx);
cout<<endl;
toArray(jx-sx,array_n,4);
sort(array_n,array_n+4,cmp);
jx=toNumber(array_n,4);
sort(array_n,array_n+4);
sx=toNumber(array_n,4);
}
printf("%04d",jx);
cout<<" - ";
printf("%04d",sx);
cout<<" = ";
printf("%04d",jx-sx);
cout<<endl;
}
return 0;
}
1.数组长度计算 sizeof()
int n[4]={'1','2','5','6'};
cout<<sizeof(n)/sizeof(int);
2.字符串string补上前置字符
string s;
cin>>s;
s.insert(0,4-s.size(),'0');//这里用于补充前置零至4位数
//s.insert(size_typepos, size_typen, charTc); //从pos开始向后添加n个字符c
3.do{}while();
和while(){}
的区别
while先判断后执行,do while先执行后判断;
当不满足循环条件时,while循环一次都不会执行,do while循环已经执行了一次不满足循环条件的内容;
在一些情况下,do while循环可以减少代码量(例如PATB1019)
1020
#include<bits/stdc++.h>
using namespace std;
struct yb{
double kc;
double sj;
double dj;
};
bool cmp(yb a,yb b){
return a.dj>b.dj;
}
int main(){
int n,d;
double sum=0;
cin>>n>>d;
yb nyb[n];
for(int i=0;i<n;i++)
cin>>nyb[i].kc;
for(int i=0;i<n;i++)
cin>>nyb[i].sj;
for(int i=0;i<n;i++)
nyb[i].dj=nyb[i].sj/nyb[i].kc;
sort(nyb,nyb+n,cmp);
// for(int i=0;i<n;i++)
// cout<<nyb[i].dj<<endl;
for(int i=0;i<n;i++)
{
if(d>0)
{
if(d-nyb[i].kc>=0)
{
sum=sum+nyb[i].sj;
d=d-nyb[i].kc;
}
else
{
sum=sum+nyb[i].dj*d;
d=0;
}
}
else
break;
}
printf("%.2f",sum);
return 0;
}
以上是关于乙级PAT1016-1020答案详解与重要知识点(2021.9.27-2021.10.2)的主要内容,如果未能解决你的问题,请参考以下文章