0
点赞
收藏
分享

微信扫一扫

一张图带您看懂 用c语言打印回文图

weednoah 2022-04-05 阅读 194
c语言

Printing Pattern Using Loops | HackerRank

题来自hackerrank 非常有趣的一道c语言回文图输出的题

我将用两张图 带您看明白解决该问题的两种思路

一.从一种不太直观的方法——减法法 开始认识这道题

1.程序的展示 以及c语言是逐行从左到右打印一定要明确

2.程序解释

拆一个变量为4时候的回文图 其实就能很清楚的认识到 减法法 各变量的含义

len=既是行数也是列数=一溜的坑位

col=固定行 某列=也是 列数

row=当前行数

m=挑 {当前行数、当前列数、坑位-当前行数-1、坑位-当前列数-1} 的最小值

n=回文图 外圈老大

最后输出的是 我们回文图 的老大减去老小

len-row-1 在一个不换行的循环里是不变的 所以就起着把边的作用

len-col-1 每一行倒着看 指4为0的一个作用

它俩综合可以整个1 就是绝对核心 1

.方法二——非常清晰直观的 行列对比法

输出回文图:本质是行列博弈

比第一个 减法法 直观太多了!

这道题本质是 行号(zh)决定的输出数字:ph  列号(zl)决定的输出数字:pl  的一个对抗!

ph pl两者谁大取谁输出!

关于一些变量名称的说明:

zh :正向行序号h和反向行序号dh 的较大值

zl :正向行序号l和反向行序号dl 的较大值

zong:总共输出多少行和多少列

程序展示如下:

————————————————————————————————

#include <stdio.h>

#include <string.h>

#include <math.h>

#include <stdlib.h>

int max(int a,int b){

        if(a>b) return a;

        else return b;

}

int min(int c,int d){

        if(c>d) return d;

        else return c;

}

int main()

{

    int n;

    int h,l,dh,dl,p,zong,ph,pl,zh,zl;

    scanf("%d", &n);

          // Complete the code to print the pattern.

         

          zong=2*n-1;

         

         

         

         

         

for(h=0;h<zong;h++)

{

        for(l=0;l<zong;l++)

        {   dh=zong-1-h;

              dl=zong-1-l;

         

              zh=min(h,dh);

              zl=min(l,dl);

         

              ph=n-zh;

              pl=n-zl;

         

              p=max(ph,pl);

                

               

                printf("%d ",p);

        }

       

       

        printf("\n");

}

         

         

         

    return 0;

}

三.评论区看到的其它思路

一个注解:什么是 abs

abs是 快速的判断 并赋值

举报

相关推荐

一张图读懂 sql join

0 条评论