现代程序设计homework——04
题目:
详见:http://www.cnblogs.com/xinz/p/3341551.html
题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话。确实,题目真心不简单,放在那半个多月都没有什么好的想法,直到听了这个大牛的讲解,我明智地选择了简单粗暴的做法。为了满足这个题目的三个要求,不择手段了一把,不过把代码搞得大量重复,满篇都是for的感觉确实不怎么样。
思路:
我和我的小伙伴儿是这么想的,尽量让更多、更长的单词对角放置是比较明智的,把一个矩阵看成一个国际象棋的棋盘,两条对角线方向的单词分别只占用黑色或者白色的地方。于是,一个很暴力的遍历就产生了。四种对角方向轮流分别按照行列的顺序进行搜索,找到自己能放置的位置之后,果断占据。(出乎意料,如果全部按照这样操作,效果非常好,几乎没有几个地方是空着的。)然而,我们需要每个方向都有两个单词,于是,留下8个单词进行横平竖直的摆放,同时,尽量将其调整成一个正方形。
尽管我的对角插入方法可以满足矩阵长宽之间差距不大于最后插入的单词的长度,我依旧可以制造出特别刁钻的样例,然八个单词制造不出正方形的矩阵。我想了很久,尝试了几种方法,当我想要使得我能处理的范围扩大一点点时,我的代码量是要成倍增加的,用我小火把的话说:“还不如用无脑的方法”。于是,我就用了无脑的方法。(经过几轮测试,好像正常一点儿的样例都可以无脑解决的)。
对于空白的填补,我本打算用词频统计的升序来填的,这样弄的后果是所有的空白几乎都被“j”占据了。于是,我们采用了随机值,如果出现冲突,则选择出现概率更小的值来替换。如果最小的还是冲突则循环,如果点儿背到26个字母都冲突,我们就空着那个点。每次填入一个词,我们进行一下冲突检查,这个工作是我的小伙伴儿做的。
源码:
此处略去n*100行,代码写得太丑了,好多重复,好多for……
效果:
test1
题目:
答案:
test2:
题目:

答案:

感受:
我信誓旦旦地认为我可以按时完成作业,结果我又错了……好消息是,前三次作业欠的债还了一个。
表格:
| 分析 | 0.5h |
| 设计 | 3+2h |
| 编码 | >=7.5h |
现代程序设计homework——04的更多相关文章
- 标准C程序设计七---04
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 小兔JS教程(四)-- 彻底攻略JS数组
在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...
- nVIDIA SDK White Paper ----Vertex Texture Fetch Water
http://blog.csdn.net/soilwork/article/details/713842 nVIDIA SDK White Paper ----Vertex Texture Fetch ...
- 小兔JS教程(五) 简单易懂的JSON入门
上一节的参考答案: http://xiaotublog.com/demo.html?path=homework/04/index2 本节重点来介绍一下JSON,JSON(JavaScript Obje ...
- 软工+C(9): 助教指南,持续更新...
上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...
- 20145218 《Java程序设计》第04次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.22 实验名称:Android开发基础 一.实验内容 1.基于Android ...
- [连载]Java程序设计(04)---任务驱动的方法:工资结算系统
任务:或在公司,该公司将其分为三类人员:部门经理.销售员.在发工资的时候,部门经理拿固定月薪8000元.技术人员按每小时100元领取月薪.销售人员依照500元底薪加当月销售额的4%进行提成.设计并实现 ...
- 20172319 2018.04.01-04.11 《Java程序设计》第5周学习总结
20172319 2018.04.01-04.11 <Java程序设计>第5周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错 ...
- 20172319 2018.04.11-16 《Java程序设计教程》 第6周学习总结
20172319 2018.04.11-16 <Java程序设计教程>第6周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题 ...
随机推荐
- Python中的split()函数的使用方法
函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...
- 异常:java.lang.UnsupportedOperationException: Manual close is not allowed over a Spring managed SqlSession
使用mybatis-3.2.2.jar + mybatis-spring-1.2.0.jar集成时,报以下异常: 15:42:48.538 [Thread-1] DEBUG o.s.b.f.s.Dis ...
- JEE学习线路
传智播客:javaEE学习线路以及需要掌握的知识点:http://java.itcast.cn/subject/javastudypath/index.shtml 最近在学JavaEE,没学Java ...
- hdu 2372 El Dorado (dp)
题目链接 题意:给n个数字, 求有k个数字的上升子序列有多少种. 思路:d[i][j]表示 以第i个元素为 子序列的最后一个元素,长度为j的子序列 有多少种. 比赛的时候 光想着用组合数做了..... ...
- poj 1703 Find them, Catch them(并查集)
题目:http://poj.org/problem?id=1703 题意:一个地方有两个帮派, 每个罪犯只属于其中一个帮派,D 后输入的是两个人属于不同的帮派, A后询问 两个人是否属于 同一个帮派. ...
- LA 3357 (递推 找规律) Pinary
n位不含前导零不含连续1的数共有fib(n)个,fib(n)为斐波那契数列. 所以可以预处理一下fib的前缀和,查找一下第n个数是k位数,然后再递归计算它是第k位数里的多少位. 举个例子,比如说要找第 ...
- 全球最受欢迎的十大Linux发行版(图)
帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...
- MVC&WebForm对照学习:文件下载
说完了WebForm和MVC中的文件上传,就不得不说用户从服务器端下载资源了.那么今天就扯扯在WebForm和MVC中是如何实现文件下载的.说起WebForm中的文件上传,codeshark在他的博文 ...
- linux lnmp编译安装
关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled ...
- 搞明白这八个问题,Linux系统就好学多了。
正在犹豫入坑Linux学习的同学或者已经入坑的同学,经常会问到这样八个问题.今天,这些问题我都会一一解答,希望我的看法能帮助各位同学.常言道“好的开始是成功的一半”,如果你明白了以下八个问题,就能有一 ...