打印图案.

简介: 此类题目的逻辑,需要画图展现,并找到规律,如果硬着头皮可能会浪费很多时间才能敲出来代码,找到规律确定行和列就能很快做出来。

题目一



a3bd4d744ad4481da6a9c153cef64598.png


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    int n = 0;
    int i = 0;
    int j = 0;
    while ((scanf("%d", &n)) == 1)
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j <= i; j++)
            {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}


  1. 先把整个图案想象成一个矩阵,利用 j <= i 来控制对角矩阵(联想线性代数)


规则:i 控制行, j 控制列


7453ce6fccaf4db8910ad9c51df3c029.png


  1. 画出图形找规律


(1) 每行第一个元素打印图形 (j = 0)

(2) 每行最后一个元素打印图形 (i = j)

(3) 最后一行打印图形 (i = n - 1)

(4) 其余的全部打印空格


902c3c5025e54e0bb160fb0ece519efc.jpg


为了美观,打印的地方设置成 一个图形 + 一个空格

不打印的地方设置成 两个空格


注意 if 判断的时候要用==


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    int i = 0;
    int j = 0;
    int n = 0;
    while ((scanf("%d", &n)) == 1)
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j <= i; j++)
            {
                if (j == 0 || i == j || i == n - 1)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }   
    return 0;
}


最终结果


0870d9b417064cc498b7c56e27a4e1ba.png


题目二



867687f922134d27b3339d7c74c3e3ba.png


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    int n = 0;
    int i = 0;
    int j = 0;
    while ((scanf("%d", &n)) == 1)
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {             
                    printf("*");              
            }
            printf("\n");
        }
    }
    return 0;
}


  1. 先把图形想成一个完整的方阵


规则:i 控制行, j 控制列


27cf4331bdb6406d9af32dd4a1aae501.png


  1. 画出图形找规律
    (1) 正对角线打印图形 (i = j)
    (2) 反对角线的每个坐标之和为 n - 1


这里应该注意:


下图画出的坐标只是为了呈现矩阵逻辑,

实际上对应代码中应该是纵横坐标各减去 1


因为:


第一行是 i = 0,

第二行是 i = 1,

第三行是 i = 2,

第四行是 i = 3…

列也是如此…


比如说,我下图画的坐标 ( 1, 5 ) 对应代码中的 ( 0 , 4 )


00b821d35728465eb1d020e7feea817c.jpg


注意 if 判断的时候要用==


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    int n = 0;
    int i = 0;
    int j = 0;
    while ((scanf("%d", &n)) == 1)
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                if ((i + j) == (n - 1) || (i == j))
                    printf("*");
                else
                    printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}


最终结果


ffd89f0279354ba99d3cad5c4c1bb4e6.png


总结



此类题目的逻辑,需要画图展现,并找到规律,如果硬着头皮可能会浪费很多时间才能敲出来代码,找到规律确定行和列就能很快做出来。


image.jpeg


Over. 谢谢观看哟~


目录
相关文章
|
19天前
用*号输出字母C的图案
用*号输出字母C的图案。
14 2
|
1天前
L1-002 打印沙漏
L1-002 打印沙漏
9 0
|
4月前
|
机器学习/深度学习 C语言 C++
『C/C++』Eg5: 打印沙漏
『C/C++』Eg5: 打印沙漏
|
9月前
打印’X‘形图案
打印’X‘形图案
54 0
|
10月前
圣诞树的打印
圣诞树的打印
68 0
|
11月前
7-138 打印沙漏
7-138 打印沙漏
58 0
打印星形三角
方法一: # 使用while,完成图形的输出 i = 1 k = 5 while i < 6: j = 1 while j 0: j = 1 while j < k: print('*', end=' ') j += 1 p...
1004 0