#C语言——刷题攻略:牛客编程入门训练(十二):攻克 循环控制(四)、循环输出图形(一),轻松拿捏!

🌟菜鸟主页:@晨非辰的主页****

👀学习专栏:《C语言刷题合集》****

💪学习阶段:C语言方向初学者

⏳名言欣赏:"代码行数决定你的下限,算法思维决定你的上限。"

前言:在学习编程语言的同时,千万别忘了刷刷题来巩固一下学到的知识,对于牛客网_编程入门系列,小子会持续更新分享刷题过程,其中包括一些基础板块的题目,本次将呈现7道题。

~~注意部分标题括号内代表对题目涉及到的知识进行说明!


目录

[1. BC95 小乐乐与进制转换](#1. BC95 小乐乐与进制转换)

[2. BC97 回文对称数](#2. BC97 回文对称数)

[3. BC99 正方形图案](#3. BC99 正方形图案)

[4. BC100 直角三角形图案](#4. BC100 直角三角形图案)

[5. BC101 翻转直角三角形图案](#5. BC101 翻转直角三角形图案)

[6. BC102 带空格直角三角形图案](#6. BC102 带空格直角三角形图案)

[7. BC102 带空格直角三角形图案](#7. BC102 带空格直角三角形图案)


1. BC95 小乐乐与进制转换

链接:牛客网_BC95 小乐乐与进制转换_简单

cpp 复制代码
#include <stdio.h>
int main()
{
    long a = 0;
    long i = 1;
    long b = 0;
    long sum = 0;
    scanf("%ld", &a);
    do
    {
        b = a % 6;
        sum += b * i;
        i *= 10;
        a /= 6;
    } while (a);
    printf("%ld", sum);
    return 0;
}

思路------

--本题要求十进制转六进制 ,思路与学过的二进制、十进制、十六进制之间的转换是相同的;整数%6取余倒着排序,再整数 / 6,在进行重复操作;注意点就是,类型的选择,当测试数值较大时,可能会超过 int 范围,建议使用long。


2. BC97 回文对称数

链接:牛客网_BC97 回文对称数_简单

cpp 复制代码
#include <stdio.h>
int main() 
{
    int a = 0;
    scanf("%d", &a);
    int i = 0;
    int j = 0;
    for(i = 1; i <= a; i++)
    {   
        j = i;
        int sum = 0;//用于取余后的数值重建
        do 
        {
            sum = sum * 10 + j % 10; 
            j /= 10;
        }while (j>0);
       
        if(sum == i)
        {
            printf("%d\n", sum);
        }
    }
    
    return 0;
}

思路------

--本题关键点在于如何对取余操作后的数值重建,循环中,将获得的最低位逐次*10移到最高位,最后在进行数值比较即可。


3. BC99 正方形图案

链接:牛客网_BC99 正方形图案_简单

cpp 复制代码
#include <stdio.h>
int main() 
{
    int a;
    while (scanf("%d", &a) != EOF) 
    {
        int i =0;
        for(i = 1; i <= a; i++)
        {
            int j = 0;
            for(j = 1; j <= a; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

思路------

--本题思路利用for循环的嵌套 ,设置行、列的输出方式;因为图形为标准的正方形,当打印完一行,换行到下一行继续输出。


4. BC100 直角三角形图案

链接:牛客网_BC100 直角三角形图案_简单

cpp 复制代码
#include <stdio.h>
int main() 
{
    int a;
    while (scanf("%d", &a) != EOF) 
    { 
        //定义行数的变换
        int k = 1;//每行个数的定义
        for(int i = 1; i <= a; i++)
        {

            //定义每行的输出
            int j = 0;
            for(j = 1; j <= k; j++)
            {
                printf("* ");
            }
            printf("\n");
            k++;   
        }
    }
    return 0;
}

思路------

--本题思路与上一题正方形的输出基本相同,只不过是每行输出的个数需要额外定义;输出完一行,先换行,再限制个数变量k+1,即可完成。


5. BC101 翻转直角三角形图案

链接:牛客网_BC101 翻转直角三角形图案_简单

cpp 复制代码
#include <stdio.h>
int main() 
{
    int a;
    while (scanf("%d", &a) != EOF) 
    { 
        //定义行数的变换
        int k = a;//每行个数的定义
        for(int i = 1; i <= a; i++)
        {

            //定义每行的输出
            int j = 0;
            for(j = 1; j <= k; j++)
            {
                printf("* ");
            }
            printf("\n");
            k--;   
        }
    }
    return 0;
}

思路------

--本题是上一题的稍微改变,二者代码大致相同,只需要将个数限制变量开始时等于行数,再输出完一行后,换行再个数变量-1,即可完成。


6. BC102 带空格直角三角形图案

链接·:牛客网_BC102 带空格直角三角形图案_简单

cpp 复制代码
#include <stdio.h>
  int main() 
{
    int a;
    while (scanf("%d", &a) != EOF) 
    { 
        int k = a;//每行个数的定义

        //定义行数的变换
        for(int i = 1; i <= a; i++)
        {

            //定义每行的输出
            int j = 0;
            for(j = 1; j <= k; j++)
            {
                printf("* ");
            }
            printf("\n");
            k--;   
        }
    }
    return 0;
}

思路------

--本题大致结构就显而易见了,也就是上一题稍微改动改动;在最初将每行的个数变为最大数值,后面的内层循环,每输出完一行,个数k--,换行完成。


7. BC102 带空格直角三角形图案

链接:牛客网_BC102 带空格直角三角形图案_简单

cpp 复制代码
int main()
{
    int a;
    while (scanf("%d", &a) != EOF)
    {
        int j = a;
        int k = a;
        //循环行变换
        for (int i = 1; i <= a; i++)
        {

            //进行单行空格的输出
            for (int i = 1; i <= (k - 1); i++)
            {
                printf("  ");
            }

            //进行单行*输出
            for (int i = 1; i <= j - (k - 1); i++)
            {
                printf("* ");
            }
            printf("\n");
            k--;
        }

    }
    return 0;
}

思路------

--本题思路就需要有一点点想法了,外层循环好说;对于内层循环,首先就要先输出空格,在输出 ' * ' ;为了循环控制 ' * ' 的数量,就要想办法让变量从最小值逐次到最大值------>j - (k - 1)。


刷题系列回顾:

#C语言------刷题攻略:牛客编程入门训练(十):攻克 循环控制(二),轻松拿捏!

#C语言------刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!

结语:本篇文章就到此结束了,本文主要是练习部分循环控制以及输出图形题目,后续的题目练习难度会慢慢上来,但总体来说不会太难,喜欢的朋友们,一起来学习吧!欢迎三连~

相关推荐
夏幻灵40 分钟前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码1 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
bkspiderx2 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆3 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光3 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园3 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
青绿蓝LCA低碳研究院3 小时前
FSLCI首次在印度举办会议,我们需要学习什么? · 青绿蓝
经验分享
qq_284274054 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
禾小西4 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨4 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言