• 牛客网刷题训练(三)


    👩‍💻博客主页:风起 风落的博客主页

    ✨欢迎关注🖱点赞🎀收藏⭐留言✒

    👕参考网站:牛客网

    💻首发时间:🎞2022年7月27日🎠

    🎨你的收入跟你的不可替代成正比

    🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦
    💬给大家介绍一个求职刷题收割offer的地方👉点击进入网站

    在这里插入图片描述

    1.BC112 小乐乐求和

    描述
    小乐乐最近接触了求和符号Σ,他想计算的结果。但是小乐乐很笨,请你帮助他解答。
    输入描述:
    输入一个正整数n (1 ≤ n ≤ 109)
    输出描述:
    输出一个值,为求和结果。

    示例1
    输入:
    1
    输出:
    1

    示例2
    输入:
    10
    输出:
    55

    #include
    int main()
    {
        int n=0;
        scanf("%d",&n);
        int i=0;
        long long ret=0;
        for(i=1;i<=n;i++)
        {
            ret+=i;
        }
        printf("%ld\n",ret);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    这道题看似简单 实际上 如果 ret 设计成int 返回值用%d接收,就会报错
    在这里插入图片描述
    实际输出的结果比预期结果少了一位 由此我们可以想到一个问题 是不是越界了
    int 为4个字节 28个比特位 即2^27
    我们使用 long long 接收就可以解决了

    2.BC107 矩阵转置

    描述
    KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。
    输入描述:
    第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
    从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
    输出描述:
    输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。

    示例1
    输入:
    2 3
    1 2 3
    4 5 6
    输出:
    1 4
    2 5
    3 6

    #include
    int main()
    {
        int i=0;
        int j=0;
        int m=0;
        int n=0;
        scanf("%d%d",&m,&n);
        int arr1[10][10]={0};
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%d",&arr1[i][j]);
            }
        }
        int arr2[10][10]={0};
        for(i=0;i<n;i++)//3
        {
            for(j=0;j<m;j++)//2
            {
                arr2[i][j]=arr1[j][i];
                printf("%d ",arr2[i][j]);
            }
            printf("\n");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

    这道题主要考察了对数组的理解程度
    主要思路 :创建两个二维数组 : arr1[10][10],arr2[10][10]
    用第一个二维数组接收输入进来的值
    用第二个二维数组接收要转换过来的值
    即第一次 行为m 列为n
    第二次 行为n 列为m
    把第一个二维数组满意的值传到第二个二维数组里

    3.BC109 杨辉三角

    描述
    KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。
    输入描述:
    第一行包含一个整数数n。 (1≤n≤30)
    输出描述:
    包含n行,为杨辉三角的前n行,每个数输出域宽为5。

    示例1
    输入:
    6
    输出:
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1

    #include
    int main()
    {
        int i=0;
        int j=0;
        int n=0;
        scanf("%d",&n);
        int arr[30][30]={0};
        for(i=0;i<n;i++)
        {
            for(j=0;j<=i;j++)
            {
                if(j==0||i==j)
                {
                    arr[i][j]=1;
                    printf("%5d",arr[i][j]);
                }
                else
                {
                    arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
                    printf("%5d",arr[i][j]);
                }
            }
            printf("\n");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    这道题想要搞懂, 就先看好它是由什么构成的
    首先 为一个三角形 所以写了一个三角形的双for
    把每一个点都看作 坐标
    即第一列都为1
    行与列相等的坐标 都为1
    所以 写了个if语句
    而其他的坐标都为 上一个坐标和上一个左边的坐标加和
    不要忘记换行

    4.BC38 变种水仙花

    描述
    变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。
    例如:
    655 = 6 * 55 + 65 * 5
    1461 = 1461 + 1461 + 146*1
    求出 5位数中的所有 Lily Number。

    输入描述:

    输出描述:
    一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格。

    #include
    int main()
    {
        int i=0;
        int j=0;
        int ret=0;
        for(i=10000;i<=99999;i++)
        {
            ret=0;
            for(j=10;j<=10000;j*=10)
            {
                ret=ret+(i/j)*(i%j);
            }
            if(ret==i)
            {
                printf("%d ",i);
            }
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    相对于正常的水仙花数 有点绕
    如果想不到 直接 将所有情况列举出来 然后加和跟i比较也是可以的
    观察1461 就知道 先从 /10 %10 开始 到/1000 %1000 每次 * 10
    1461作为一个4位数 最后/1000
    那5位数肯定最后/10000 %10000
    每次再*10就可以了

    总结

    通过以上来自牛客网的练习题
    相信会对学习c语言更有兴趣 ,让我们一起加油吧
    不太自信的小伙伴可以看看这个训练
    在这里插入图片描述

  • 相关阅读:
    图解Intel SM4-AES-NI实现方案
    Android自定义View--Paint
    腾讯云服务器16核 32G 28M带宽租用价格、性能测评及配置大全
    Spring学习笔记9 SpringIOC注解式开发
    数字企业,全链协同 | 数商云•瓴犀产品3.0战略发布会即将召开
    can: raw protocol是什么?
    【电源专题】开关模式电源电流检测——电流检测方法
    Vue3鼠标拖拽生成区域块并选中元素
    22-07-29 西安 分布式事务、Seata
    C语言之__attribute__((visibility(“default“)))等gcc flag讲解(六十二)
  • 原文地址:https://blog.csdn.net/qq_62939852/article/details/126013875