自顶向下的编程风格

/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


    自顶向下的编程风格:
                所谓自顶向下的编程风格,我感觉和我们平时所见过的分治与递归的思想较为类似,
            为什么这样说呢,是因为这种编程风格也是将一个大问题转换为许多小问题来进行解决
            比如,就在这道画格子的题目中,我们发现,对于一个图来说,我们最朴素的想法肯定是
            先画所有的竖线,然后再画所有的横线,或者说是先画所有的横线,再画所有的竖线。
            画横线的方法:
                    1.写出一专门用来画横线的函数,该函数包括以下参数(数组名,开始的行号,开始的列标,结束的列标)

                    2.画竖线的函数与画横线的函数思路类似,只是对于函数的参数要发生一定的变化
                    (数组名,开始的列号,开始的行号,结束的行号)



              该题目一开始是将这些字符全部存入到一个叫做 cache的缓冲区中,因为我们知道如果直接在
              控制台上写入这些字符,从第一行写到第五行的时候,如果再对第一行的字符进行操作那将会
              是一件很困难的事情,所以我们先将他写入缓冲区中,然后对于缓冲区中的字符进行相对应的
              操作,将最终希望得到的结果显示出来就可以了。

*/









# include<cstdio>
# include<iostream>
# include<cstring>
# include<cmath>
# include<algorithm>

using namespace std;

void print( char a[20][50])
{
    for ( int i = 0;i < 20;i++ )
    {
        for ( int j = 0;j < 50;j++ )
        {
            if ( a[i][j] == 0 )
                printf(" ");
            else
                printf("%c",a[i][j]);
        }
        printf("\n");
    }
}

void line_h( char a[20][50],int row ,int col1,int col2 )
{
    for ( int i = col1;i <= col2;i++ )
        a[row][i] = '$';

}
void line_v( char a[20][50],int col,int row1,int row2 )
{
    for ( int i = row1;i <= row2;i++ )
        a[i][col] = '$';
}

int main(void)
{
    char cache[20][50];
    memset(cache,0,sizeof(cache));
    for ( int i = 0;i < 4;i++ )line_h( cache,i*3,0,32 );
    for ( int i = 0;i < 9;i++ )line_v( cache,i*4,0,9 );

    print(cache);


    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值