c语言铺地板,【北理乐学】铺地板
【题目描述】
有一名室内装潢工程队的配料员。他的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案例如下:
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语言铺地板,【北理乐学】铺地板相关推荐
- 北理乐学c语言基础答案晕,北理乐学C语言答案.doc
北理乐学C语言答案.doc 7.入门 计算圆柱的侧面积及体积 include void main double a,b; scanf"lfnlf", printf"s.2 ...
- 北理乐学回文数的思考(附代码)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把5 ...
- 北理乐学计算机实验三,北理工大学计算机实验三-字符编码与信息交换.docx
北理工大学计算机实验三-字符编码与信息交换.docx 实验报告实验名称学号 姓名 班级 实验时间 年 月 日实验报告表3-1 西文字符显示过程编码记录表输入字符ASCII码(十进制数)内存信息(二进制 ...
- Poker time 2 (enhanced version) 北理乐学作业题
思路在代码注释内pwp PS:个人做题记录,不是最优解,如有错误欢迎指正喵! 背景:两个人每人发3张牌(各从一副牌中),每张牌包括花色(红桃(Heart)>黑桃(Spade)>方块(Dia ...
- c语言拱猪计分测试例,北理C语言作业及答案3.doc
北理C语言作业及答案3北理C语言作业及答案3 C语言作业3 43. 缩写展开 成绩: 10 / 折扣: 0.8 在保存字符串时,对出现在连续位置的若干个字符,如这些字符在ASCII表中也是连续出现,则 ...
- 北理C语言压缩文本,北理C语言作业及答案2.doc
北理C语言作业及答案2.doc 34 北理工的恶龙成绩 10 / 折扣 0.8背景最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只 ...
- 北理计算机考研机试,北理工计算机2000-2010考研机试题目c语言实现.doc
北理工计算机2000-2010考研机试题目c语言实现 北理工计算机2000-2010考研机试题目c语言实现1.进制转换#include #include //#include #include #in ...
- 北理通信男找工作的经历及心得
注:北理毕业的通信专业研究生写的,希望对大家也有所帮助. 找工作很久了,一直想写一写笔经面经,也给师弟师妹留下一些建议和忠告.但是工作没着落时没心思写,找到工作又懒得写.狠了狠心,却写出这么多字,看着 ...
- 北交的计算机和北理,北航与北理
图片发自简书App 图片发自简书App 北京航空航天大学 北京航空航天大学是我国著名的"211"."985"."双一流"高校,为国家培养了大 ...
- 北理计算机未来,2021北理计算机专硕889考研经验分享
北理算是北京985院校中,性价比高,相对较容**的了,而且老师们只看重学生的知识技术水平和学习能力,不太歧视普通本科和跨考学生,(相对来说,同等条件下,老师肯定更喜欢好学校本专业学生),当然初试分数高 ...
最新文章
- linux 内核申请内存大小,linux内核常用的内存申请函数
- Markdown写作中的图床解决方案(基于七牛云、PicGo)
- linux执行cd会使用系统调用,深入理解Linux系统调用
- hbuilder设置html浏览器打开,HBuilder X如何配置浏览器操作配置方法
- virtual box和vmware有什么区别吗_真发假发套与普通假发有什么区别吗?
- 树莓派4烧录系统后黑屏_原创试用 | 树莓派3B+测评(二)ubuntu系统烧录+彩虹屏问题解决...
- [POJ1952]BUY LOW, BUY LOWER
- 上海大华条码称代码_上海大华条码秤的调试方法
- 转 可以word ,excel ,pdf ,ppt 导入和导出的思维导图
- php生成流水号,生成唯一流水号
- 静态链表 ( 数据结构 )
- 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)
- java交通调度,java毕业设计_springboot框架的的车辆调度管理系统
- ISP PIPLINE(零) 知识综述预热
- windows服务器上无法运行bat文件,ad域用户bat脚本运行不了
- 华中科技大学计算机本校保研,2018 华中科技大学计算机学院保研机试真题
- 测试面试挫败_清晰度,初级工程师,要求和挫败感
- 大型分布式网站架构设计与实践3
- 2016校招薪资汇总
- 【百日刷题计划 第一天】——熟悉语法 语法基础题