乙级PAT1011-1015答案详解与重要知识点(2021.9.21-2021.9.26)
Posted 不会讲脱口秀的程序员不是好摄影师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乙级PAT1011-1015答案详解与重要知识点(2021.9.21-2021.9.26)相关的知识,希望对你有一定的参考价值。
1011
#include<iostream>
using namespace std;
struct num{
double A;
double B;
double C;
string result;
}num[10];
int main(){
int T;
cin>>T;
for(int i=0;i<T;i++){
cin>>num[i].A>>num[i].B>>num[i].C;
}
for(int i=0;i<T;i++){
if(num[i].A+num[i].B>num[i].C)
num[i].result="true";
else
num[i].result="false";
}
for(int i=0;i<T;i++){
cout<<"Case #"<<i+1<<": "<<num[i].result;
if(i!=T-1)
cout<<endl;
}
}
1.基本数据类型的数据范围
int类型(四个字节):-231~231-1;long类型(八个字节):-263~-263-1
float类型(四个字节);double类型(八个字节)
1012
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int N;
cin>>N;
int num[N];
float A[5]={0};
for(int i=0;i<N;i++)
cin>>num[i];
for(int i=0;i<N;i++){
if(num[i]%10==0)
A[0]=A[0]+num[i];
}
if(A[0]==0)A[0]=-1;
int flag1=0;//标志是否有该类型的数据
int flag2=0;//标志该数据是加还是减
for(int i=0;i<N;i++){
if(num[i]%5==1){
flag1=1;
if(flag2%2==0){
A[1]=A[1]+num[i];
flag2++;
}
else{
A[1]=A[1]-num[i];
flag2++;
}
}
}
if(flag1==0)
A[1]=-1;
for(int i=0;i<N;i++){
if(num[i]%5==2)
A[2]++;
}
if(A[2]==0)A[2]=-1;
int temp=0;
for(int i=0;i<N;i++){
if(num[i]%5==3){
A[3]=A[3]+num[i];
temp++;
}
}
if(A[3]==0)
A[3]=-1;
else
A[3]=A[3]/temp;
for(int i=0;i<N;i++){
if(num[i]%5==4){
if(num[i]>A[4])
A[4]=num[i];
}
}
for(int i=0;i<5;i++){
if(A[i]==-1)
cout<<'N';
else if(i==3)
printf("%.1f",A[i]);
else
cout<<A[i];
if(i!=4)
cout<<' ';
}
return 0;
}
1.printf格式化输出
(1)整数
d格式:用来输出十进制整数。有以下几种用法:
%d:按整型数据的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出
%-md:m为指定的输出字段的宽度。如果数据的位数小于m,则右端补以空格,若大于m,则按实际位数输出
%0md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以’0’,若大于m,则按实际位数输出
(2)浮点数
f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
%f:不指定宽度,整数部分全部输出并输出6位小数。
%.nf:其中有n位小数,数值宽度不变
%m.nf:输出共占m列,其中有n位小数,若数值宽度小于m左端补空格。
%-m.nf:输出共占m列,其中有n位小数,若数值宽度小于m右端补空格。
(3)字符串
s格式:用来输出一个串。有几中用法
%s:例如:printf("%s", “CHINA”)输出"CHINA"字符串(不包括双引号)
%ms:输出的字符串占m列,如果字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。
2.判断语句
若第一个if判断为真,则执行完语句1就退出该判断体,不再执行后面的else if和else,即使elseif也为真也不执行。
if(){
//语句1
}
else if(){
//语句2
}
else{
//语句3
}
1013
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
bool isPriem(int num){
if(num==1||num==4)
return 0;
else if(num==2||num==3)
return 1;
if(num%2==0)
return 0;
int temp=sqrt(num);
for(int i=3;i<=temp+1;i+=2)
if(num%i==0)
return 0;
return 1;
}
int main(){
int m,n;
int sum=0;
int p[10000];
cin>>m>>n;
for(int i=1;sum<10000;i++){
if(isPriem(i)){
p[sum]=i;
sum++;
}
}
for(int i=m-1;i<=n-1;i++){
cout<<p[i];
if(i==n-1)
break;
if((i-(m-1)+1)%10==0)
cout<<endl;
else
cout<<' ';
}
}
1014
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
char c[3];
int c2;
int flag1=0;
string s1,s2,s3,s4;
cin>>s1>>s2>>s3>>s4;
int l1,l2,l3,l4;
l1=s1.size();
l2=s2.size();
l3=s3.size();
l4=s4.size();
for(int i=0;i<min(l1,l2);i++){
if(!(s1[i]>='A'&&s1[i]<='G'))
continue;
if(!(s2[i]>='A'&&s2[i]<='G'))
continue;
if(s1[i]==s2[i]){
c[0]=s1[i];
flag1=i;
break;
}
}
for(int i=flag1+1;i<min(l1,l2);i++){
if(!((s1[i]>='A'&&s1[i]<='N')||(s1[i]>='0'&&s1[i]<='9')))
continue;
if(!((s2[i]>='A'&&s2[i]<='N')||(s2[i]>='0'&&s2[i]<='9')))
continue;
if(s1[i]==s2[i]){
c[1]=s1[i];
break;
}
}
for(int i=0;i<min(l3,l4);i++){
if(!((s3[i]>='A'&&s3[i]<='Z')||(s3[i]>='a'&&s3[i]<='z')))
continue;
if(!((s4[i]>='A'&&s4[i]<='Z')||(s4[i]>='a'&&s4[i]<='z')))
continue;
if(s3[i]==s4[i]){
c2=i;
break;
}
}
//cout<<c[0]<<c[1]<<c2<<endl;
switch(c[0]-'A'){
case 0:cout<<"MON ";break;
case 1:cout<<"TUE ";break;
case 2:cout<<"WED ";break;
case 3:cout<<"THU ";break;
case 4:cout<<"FRI ";break;
case 5:cout<<"SAT ";break;
case 6:cout<<"SUN ";break;
}
if(c[1]>='0'&&c[1]<='9')
printf("%02d:",c[1]-'0');
else
cout<<c[1]-'A'+10<<':';
printf("%02d",c2);
return 0;
}
1015
#include<bits/stdc++.h>
using namespace std;
struct st{
string xh;
int de;
int cai;
int sum;
};
bool cp(st a,st b){
if( a.sum!=b.sum)
return a.sum> b.sum;
if(a.de != b.de )
return a.de>b.de;
if(a.xh!=b.xh)
return a.xh<b.xh;
return false;
}
int main(int argc, char const *argv[])
{
int n,l,h;
cin>>n>>l>>h;
st std0;
vector<st> std[4];
int sum=0;
for(int i=0;i<n;i++){
cin>>std0.xh>>std0.de>>std0.cai;
std0.sum=std0.de+std0.cai;
if(std0.de>=h&&std0.cai>=h)
std[0].push_back(std0);
else if(std0.de>=h&&std0.cai>=l)
std[1].push_back(std0);
else if(std0.de>=l&&std0.cai>=l&&std0.de>=std0.cai)
std[2].push_back(std0);
else if(std0.de>=l&&std0.cai>=l)
std[3].push_back(std0);
else
sum++;
}
cout<<n-sum<<endl;
for(int i=0;i<4;i++){
sort(std[i].begin(),std[i].end(),cp);
for(int j=0;j<std[i].size();j++){
cout<<std[i][j].xh<<" ";
cout<<std[i][j].de<<" ";
cout<<std[i][j].cai;
cout<<endl;
}
}
return 0;
}
1.多关键字比较sort(start,end,cmp)
start、end为数据的位置,sort对start到end-1进行排序。
cmp为自定义bool返回值的函数。
//多关键字排序,先对sum进行降序,再对de进行降序,在对xh进行升序
struct st{
string xh;
int de;
int cai;
int sum;
};
bool cmp(st a,st b){
if( a.sumPAT乙级1003