美文网首页
【北理乐学】铺地板

【北理乐学】铺地板

作者: JiantingFeng | 来源:发表于2018-12-22 09:56 被阅读0次

【题目描述】

有一名室内装潢工程队的配料员。他的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案例如下:

1     2     6     7     15 

3     5     8    14    16 

4     9    13    17    22 

10   12  18    21    23 

11    19  20   24    25 

如何用C 语言生成这样的图形。

【题目分析】

初见该题本以为是需要对奇偶进行分类处理(一般看见图形题就需要考虑这一方面),但幸运的是,这道题似乎不需要我们对奇偶进行讨论,似乎所有的用例都是奇数,所以我们只对奇数处理即可。下面我贴两组代码,一个是按贴地板的顺序依次填充的,另一部分则是运用递归对通项进行求解。

【常规解法】

#include <stdio.h>

#include <string.h>

#define maxn 20

int a[maxn][maxn];

int main(){

memset(a,0,sizeof(a));

int n, i=0,x,y;

scanf("%d",&n);

a[x=0][y=0]=++i;

while(i<n*n/2){

if(y+1<=n){

a[x][++y]=++i;

}

while(y-1>=0&&x+1<=n){

a[++x][--y]=++i;

}

if(x+1<=n){

a[++x][y]=++i;

}

while(y+1<=n&&x-1>=0){

a[--x][++y]=++i;

}

}

while(i<n*n){

if(y+1<n&&0==a[x][y+1]){

a[x][++y]=++i;

}

while(y+1<n&&x-1>=0&&0==a[x-1][y+1]){

a[--x][++y]=++i;

}

if(x+1<n&&0==a[x+1][y]){

a[++x][y]=++i;

}

while(y-1>=0&&x+1<n&&0==a[x+1][y-1]){

a[++x][--y]=++i;

}

}

for(int i=0;i<n;i++){

for(int j=0;j<n;j++){

printf("%3d",a[i][j]);

}

printf("\n");

}

return 0;

}

【递归解法】

#include<stdio.h>

int go(int i, int j,int n) {

    if (i + j > n + 1)return n * n + 1 - go(n + 1 - i, n + 1 - j, n);

    int s = (i + j - 2) * (i + j - 1) / 2;

    if ((i + j) % 2)return s + i;

    return s + j;

}

int main() {

    int i, j, n;

    scanf("%d", &n);

    for (i = 1; i <= n; i++) {

        for (j = 1; j < n; j++)printf("%2d ", go(i, j, n));

        printf("%2d\n", go(i, n, n));

    }

    return 0;

}

【Hint】

看似递归的代码比常规解法精简许多,但是要思考的量却的确比常规解法大,同时采用递归,可能内存消耗会出乎意料的大(这也是递归最大的弊端),仍有重复子问题(即递归基)的多次计算,感兴趣的可以查查Dynamic Programming(简称DP),可以大幅度降低该问题的运行时间。

相关文章

  • 【北理乐学】铺地板

    【题目描述】 有一名室内装潢工程队的配料员。他的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案例如下: 1 2 ...

  • 【北理乐学】数制转换

    【题目描述】 我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。 这个题目会给你两个不同的数字,...

  • 【北理乐学】机智的大师

    【题目】 题目背景 在BIT的网络教室里,有一位叫做大师的传奇的人物。大师卖萌卖得好,黑人黑得好,写代码更是一绝...

  • 【北理乐学】删除重复的字符

    【字符】删除重复字符 成绩5开启时间2018年12月23日 星期日 14:00 折扣0.8折扣时间2018年12月...

  • 考上北京理工大学环艺专业,看这一篇就够了!

    2020北理初试成绩已经揭晓, 在线上复试尚未开展之际,就已有很多小伙伴们向学长咨询2021北理环艺考试的情况,学...

  • 北理

    光电学院的高昆教授 博士自律会规划自己的生活 有问题和老师这样是否合理 博士两人间(留学公寓)客厅豪华套间 三环 ...

  • 北理再见

    北理的天空除了蓝,还有白。她的白是云的白,是透彻的白,而她的蓝,是天真的蓝。 北理美好而舒服的天空,是飞机最眷恋的...

  • 鞠文辉书

    芝芝,真是深藏不露的学霸呀,恭喜你考上北理,过上北漂的日子了哈哈。在新的环境,会遇到很多优秀的人,可能会发现之前的...

  • 想去北理读博

    刚才又和北邮的师姐聊了北邮的助学金和生活条件,很明显不管补助还是住宿条件都不如北理的 真的好想去北理读博 如果让我...

  • 北航与北理

    北京航空航天大学 北京航空航天大学是我国著名的“211”、“985”、“双一流”高校,为国家培养了大批的航空航天人...

网友评论

      本文标题:【北理乐学】铺地板

      本文链接:https://www.haomeiwen.com/subject/uwxikqtx.html