【题目描述】

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

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

#include

#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

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

if(y+1

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

}

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

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

}

if(x+1

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

}

while(y-1>=0&&x+1

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

}

}

for(int i=0;i

for(int j=0;j

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

}

printf("\n");

}

return 0;

}

【递归解法】

#include

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),可以大幅度降低该问题的运行时间。

c语言铺地板,【北理乐学】铺地板相关推荐

  1. 北理乐学c语言基础答案晕,北理乐学C语言答案.doc

    北理乐学C语言答案.doc 7.入门 计算圆柱的侧面积及体积 include void main double a,b; scanf"lfnlf", printf"s.2 ...

  2. 北理乐学回文数的思考(附代码)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把5 ...

  3. 北理乐学计算机实验三,北理工大学计算机实验三-字符编码与信息交换.docx

    北理工大学计算机实验三-字符编码与信息交换.docx 实验报告实验名称学号 姓名 班级 实验时间 年 月 日实验报告表3-1 西文字符显示过程编码记录表输入字符ASCII码(十进制数)内存信息(二进制 ...

  4. Poker time 2 (enhanced version) 北理乐学作业题

    思路在代码注释内pwp PS:个人做题记录,不是最优解,如有错误欢迎指正喵! 背景:两个人每人发3张牌(各从一副牌中),每张牌包括花色(红桃(Heart)>黑桃(Spade)>方块(Dia ...

  5. c语言拱猪计分测试例,北理C语言作业及答案3.doc

    北理C语言作业及答案3北理C语言作业及答案3 C语言作业3 43. 缩写展开 成绩: 10 / 折扣: 0.8 在保存字符串时,对出现在连续位置的若干个字符,如这些字符在ASCII表中也是连续出现,则 ...

  6. 北理C语言压缩文本,北理C语言作业及答案2.doc

    北理C语言作业及答案2.doc 34 北理工的恶龙成绩 10 / 折扣 0.8背景最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只 ...

  7. 北理计算机考研机试,北理工计算机2000-2010考研机试题目c语言实现.doc

    北理工计算机2000-2010考研机试题目c语言实现 北理工计算机2000-2010考研机试题目c语言实现1.进制转换#include #include //#include #include #in ...

  8. 北理通信男找工作的经历及心得

    注:北理毕业的通信专业研究生写的,希望对大家也有所帮助. 找工作很久了,一直想写一写笔经面经,也给师弟师妹留下一些建议和忠告.但是工作没着落时没心思写,找到工作又懒得写.狠了狠心,却写出这么多字,看着 ...

  9. 北交的计算机和北理,北航与北理

    图片发自简书App 图片发自简书App 北京航空航天大学 北京航空航天大学是我国著名的"211"."985"."双一流"高校,为国家培养了大 ...

  10. 北理计算机未来,2021北理计算机专硕889考研经验分享

    北理算是北京985院校中,性价比高,相对较容**的了,而且老师们只看重学生的知识技术水平和学习能力,不太歧视普通本科和跨考学生,(相对来说,同等条件下,老师肯定更喜欢好学校本专业学生),当然初试分数高 ...

最新文章

  1. linux 内核申请内存大小,linux内核常用的内存申请函数
  2. Markdown写作中的图床解决方案(基于七牛云、PicGo)
  3. linux执行cd会使用系统调用,深入理解Linux系统调用
  4. hbuilder设置html浏览器打开,HBuilder X如何配置浏览器操作配置方法
  5. virtual box和vmware有什么区别吗_真发假发套与普通假发有什么区别吗?
  6. 树莓派4烧录系统后黑屏_原创试用 | 树莓派3B+测评(二)ubuntu系统烧录+彩虹屏问题解决...
  7. [POJ1952]BUY LOW, BUY LOWER
  8. 上海大华条码称代码_上海大华条码秤的调试方法
  9. 转 可以word ,excel ,pdf ,ppt 导入和导出的思维导图
  10. php生成流水号,生成唯一流水号
  11. 静态链表 ( 数据结构 )
  12. 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)
  13. java交通调度,java毕业设计_springboot框架的的车辆调度管理系统
  14. ISP PIPLINE(零) 知识综述预热
  15. windows服务器上无法运行bat文件,ad域用户bat脚本运行不了
  16. 华中科技大学计算机本校保研,2018 华中科技大学计算机学院保研机试真题
  17. 测试面试挫败_清晰度,初级工程师,要求和挫败感
  18. 大型分布式网站架构设计与实践3
  19. 2016校招薪资汇总
  20. 【百日刷题计划 第一天】——熟悉语法 语法基础题

热门文章

  1. windows内核基础
  2. 聊天机器人的“高情商”炼成术
  3. tf卡可以自己裁剪成nm卡_这些年Surface 3用过的TF卡与购买心得
  4. 统计自然语言处理---信息论基础
  5. vfp报表纸张设置_VFP报表输出.doc
  6. pp助手苹果版本_苹果开放10.33降级通道,附降级教程及可降机型
  7. 代谢组学常见数据库列表和简介
  8. Maven实战(高清完整带书签)
  9. MAven实战 测试
  10. GBDT算法参数详解