DAY01 pat乙级刷题(c++代码)

第一天开始做先从最简单的开始吧,先挑选了牛客网通过率50%以上的几道题做了做,发现其中有很多坑,大体思路可以想到,但是个别情况会漏掉。

4047 个位数的统计

在这里插入图片描述
✨需要注意的一点就是 输入的整数位数过于长,所以不能用int来存储,我直接选用了字符串来储存
✨注意输出格式,不要画蛇添足

#include<iostream>
using namespace std;

int main(){
    string number;
    int b = 0;
    int a[10] = {0};
    cin>>number;

    for(int i = 0;i<number.length();i++){
       char c = number[i];
       b = c-'0';
        a[b]++;
    }

    for(int i=0;i<10;i++){
            if(a[i]!=0){
                cout<< i << ":" << a[i]<<endl;
            }

    }
}

4048 D进制的A+B (20)

在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;

char bin[500];
int len;

void T2B(int T,int BC)
{
    memset(bin,0,sizeof(bin));
    len = 0;
    int shang = 0;
    while(T>=1)
    {
        shang = T % BC;
        T /= BC;
        bin[len++] = 48 + shang;
    }
    //计算完之后要进行翻转
}
int rev(){
    for(int i= 499;i>=0;i--){
        if(bin[i]!=0){
            return i;
        }
    }
}
int main(){
    int a,b,d,sum;
    cin>>a>>b>>d;
    sum = a+b;
    T2B(sum,d);
    int kk =rev() ;//rev的作用是得到第一个不为0的坐标
    for(int i = kk;i>=0;i--){
        cout<<bin[i];
    }


}

✨转换为任意进制的代码是直接去搜的,可以作为模板记下来,但是里面有一个反转的自带函数,在codeblocks里运行正常,但是在牛客网里面却是识别不出来,所以自己写了一遍

4049组个最小数 (20)

在这里插入图片描述
在这里插入图片描述
✨ 最有难度的地方应该就是理解题意,给出的实例的意思是:
在这里插入图片描述
这样就好看多了,就是0有2个,1有2个,2有0个……

#include<iostream>
using namespace std;
//本题的输入是对应的数字的个数
int main(){
    int a[10] ;
    int k = 0;
    int sum =0;
    int j =1;
    for(int i=0;i<10;i++){
        cin>>a[i];
        sum = sum+a[i];
    }

    for(int i=1;i<10;i++){
        if(a[i]!=0){
            k=i;
            a[i]--;
            break;
        }
    }
    int b[sum];
    b[0] = k;
    for(int i = 0;i<10;i++){
        while(a[i]>0){
            b[j] = i;
            j++;
            a[i]--;
        }
    }

    for(int i = 0;i<sum;i++){
        cout<<b[i];
    }


}

4052 程序运行时间(15)

在这里插入图片描述

✨ 注意要进行四舍五入的除法,我采取的办法是因为我们需要的是除以100之后的数字,所以只需要判断取余100的余数是否大于50,若大于50则进位,否则不进位。
✨输出的格式,如果是个位数的话,需要在前面加上0 ,
如9要变成–> 09

#include<iostream>
using namespace std;
int main(){
    int c1;
    int c2;
    int cha ;
    int s1;

    cin>>c1>>c2;

    cha = (c2 - c1);


    s1 = cha%100;

    cha = cha/100;
    if(s1>=50){
        cha = cha+1;
    }

    int h = cha/3600;
    cha = cha%3600;

    int m = cha/60;
    cha = cha%60;

    int s = cha;

    if(h<10){
        cout<<"0"<<h<<":";
    }else{
        cout<<h<<":";
    }


    if(m<10){
        cout<<"0"<<m<<":";
    }else{
        cout<<m<<":";
    }

    if(s<10){
        cout<<"0"<<s;
    }else{
        cout<<s;
    }

}

继续加油鸭!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值