栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

#PAT#day5

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

#PAT#day5

文章目录

入门篇(1)——入门模拟(3.5进制转换)

B1037 在霍格沃茨找零钱

notes B1021 个位数统计(重点)

我的代码note B1014 福尔摩斯的约会/A1061 Dating

notes A1073 Scientific Notation/B1024 科学计数法

notes

入门篇(1)——入门模拟(3.5进制转换) B1037 在霍格沃茨找零钱

#include

bool exchange(int a[3],int b[3]){  //a>b则返回true
    if(a[0]>b[0]) return true;
    else if(a[1]>b[1]&&a[0]==b[0]) return true;
    else if(a[2]>b[2]&&a[0]==b[0]&&a[1]==b[1]) return true;
    else return false;
}

int main(){
    int l[3],a[3];
    scanf("%d.%d.%d",&l[0],&l[1],&l[2]);
    scanf("%d.%d.%d",&a[0],&a[1],&a[2]);
    if(exchange(l,a)==true){
        int temp;
        for(int i=0;i<3;i++){
            temp=l[i];
            l[i]=a[i];
            a[i]=temp;
        }
        printf("-");
    }
    for(int i=0;i<3;i++){
        a[i]-=l[i];
    }
    if(a[2]>28){
        a[2]-=29;
        a[1]+=1;
    }
    if(a[2]<0){
        a[2]+=29;
        a[1]-=1;
    }
    if(a[1]>16){
        a[1]-=17;
        a[0]+=1;
    }
    if(a[1]<0){
        a[1]+=17;
        a[0]-=1;
    }
    printf("%d.%d.%d",a[0],a[1],a[2]);
}

notes
    本题也可以通过将钱全部换算成最小单位的方式计算,代码会更简洁。
B1021 个位数统计(重点)

我的代码
#include
#include

int b[10];

int main(){
    char c;
    int n;
    memset(b,-1,sizeof(b));
    do{
        scanf("%c",&c);
        n=(int)c-48;
        if(n>=0){
            b[n]++;
        }
    }while(n>=0);
    for(int j=0;j<10;j++){
        if(b[j]!=-1){
            printf("%d:%dn",j,b[j]+1);
        }
    }
}

note
    我写的这个代码有点乱七八糟,用gets()输入会好很多!(如下:)scanf()、getchar()、gets()。scanf("%s",s)以换行和空格为结束;getchar()用于接收单个字符;getchar()和scanf("%c",&c)都会接收换行和空格;gets(char str)用于接收字符串存入char数组,它识别换行符n为输入结束!
#include
#include

char a[1010];
int b[10]={};

int main(){
    int n;
    gets(a);
    n=strlen(a);
    for(int i=0;i 
B1014 福尔摩斯的约会/A1061 Dating 

#include
#include
#include
int min(int a,int b){
    if(a='A'&&str[0][i]<='G'){
            printf("%s ",day[str[0][i]-'A']);
            break;
        }
    }
    for(i++;i='A'&&str[0][i]<='N'){
                printf("%02d:",str[0][i]-'A'+10);
                break;
            }
            else if(str[0][i]==str[1][i]&&str[0][i]>='0'&&str[0][i]<='9'){
                printf("%02d:",str[0][i]-'0');
                break;
            }
    }
    for(int j=0;j='a'&&str[2][j]<='z')||(str[2][j]>='A'&&str[2][j]<='Z'))){
            printf("%02d",j);
            break;
        }
    }

}


notes
    这块代码我写了好久好久,比如第37行第三块比较的字符不仅可以是小写字母也可以是大写字母一直到最后才发现。
    以及第二块比较的字符是0-9和A-N;之前一直把0-9漏掉了。题目本身并不难,题意理解很重要!!!!另)在if else if语句中当第一个if条件成立时,不论第二个else if条件是否成立,都不执行else if语句,即if else if语句由上至下只执行其中一个分支就结束该条件判断代码段!
    也就是即便很多条件其实都成立,但写在前面的分支优先级高!
A1073 Scientific Notation/B1024 科学计数法

#include
#include
#include

char str[10100];

int main(){
    gets(str);
    int len=strlen(str);
    int i,expolent=0;
    if(str[0]=='-') printf("-");
    for(i=len-1;i>=0;i--){
        if(str[i]=='+'||str[i]=='-') break;
        expolent+=(str[i]-'0')*pow(10,len-1-i);
    }
    
    if(expolent==0){
        for(int j=1;jexpolent){
            int j=3;
            while(expolent--){
                putchar(str[j++]);
            }
            printf(".");
            for(;j 
notes 
    注意题干说了长度不超过9999bite,起初一直设的char[]长度不够长,才导致一直最后一个测试点“运行时出错”。这种问题出现好几次了。!!!!!透彻理解题意!一个char变量需要一个字节来存储。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/718452.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号