【算法设计与分析】—— 打印图形

算法题目

在这里插入图片描述

  • 找规律的打印表问题一直是我的痛点,就算有时候我找出规律来了,我也不知道怎么编程打印出来,更何况有时候找不出来规律~

  • 这个题目其实规律很简单,一眼就可以看出来
    在这里插入图片描述

  • 关键是我们要怎么设计一个算法把它打印出来

算法分析

  • 首先对于任意一个问题,我们不能仅仅停留在这个问题表面,要发现这一类问题,比如这个就是演化成一个n✖n数组

  • 其次要明确数组一般是进行行和列操作的,但是我们在找规律的时候,有时不是在行和列上找到规律的,这时我们可以根据已经找到的规律的基础上,再变换成行和列上来

针对这个问题:

我们可以变换思维,在所找规律的基础上,把其当作正常的行和列,找出行和列以及n的关系,如下:在这里插入图片描述
然后找出已有规律后,还需要把这个规律转换为正常的行和列上来,方便后续操作

详细分析如下:

在这里插入图片描述在这里插入图片描述

代码实现

#include<stdio.h>

int main()
{
    int i,j,n,k=1;   //矩阵从1开始

    scanf("%d",&n);  //n代表n ✖ n矩阵(按照实际输出计算的话)

    int a[n+1][n+1];  //数组下标从0开始 但我们是从1开始  所以多定义一个,否则容易数组下标越界(注意)

    for(i=1;i<=n;i++) //i表示层行序
    {
        for(j=1;j<=n+1-i;j++)  //j表示层列序
        {
            a[i-1+j][j]=k;      //把层行序和列序转换成正常行和列存储
            k++;
        }
    }

    printf("\n");

    for(i=1;i<=n;i++) //正常行序
    {
        for(j=1;j<=i;j++)  //正常列序
        {
            printf("%d ",a[i][j]);  //按照正常行列输出
        }

        printf("\n");

    }

    return 0;
}

结果示例

  • 示例一
    在这里插入图片描述
  • 示例二
    在这里插入图片描述
  • 示例三
    在这里插入图片描述
    一般类似于找规律的问题,如果事先把所有工作都做了,那么写的代码就会很简单,但是读者理解起来就会有点困难;如果事先没有充分的准备,那么暴力代码解决,相对来说写的就会有点多~
原创文章 54 获赞 73 访问量 9532

猜你喜欢

转载自blog.csdn.net/qq_43779149/article/details/106062478
今日推荐