现代程序设计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周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题 ...
随机推荐
- HBase的Shell操作
1.进入命令行 bin/hbase shell 2.输入help 查看各种命令组. 命令是分组的,可以执行help 'general'查看general组的命令. 3.常用命令 --显示有哪些表 li ...
- 在XML里的XSD和DTD以及standalone的使用3----具体使用详解
本人亲自写的一个简单的测试例子 1.xsd定义 <?xml version="1.0" encoding="utf-8"?><xs:schem ...
- Android开发之获取系统版本号
获取系统版本号:获取当前系统的版本号: textView.setText("Product Model: " + android.os.Build.MODEL + ",& ...
- [Codeforces137C]History(排序,水题)
题目链接:http://codeforces.com/contest/137/problem/C 题意:给n对数,分别是一个事件的起始和终止时间.问被有几个事件被其他事件包含. 思路:先排序,按照起始 ...
- Parallel WebDriver executions using TestNG
In this post, we will see how does one make use of TestNG to kick off parallel UI tests using WebDri ...
- UVa 11489 (博弈) Integer Game
一个数字能被3整除就等价于这个数的各个数字之和被3整除. 所以一开始的时候先要拿一个能使剩下的数字是3的倍数的数. 然后就一直拿0.3.6.9直到某人不能再拿为止. #include <cstd ...
- UVa 10943 (数学 递推) How do you add?
将K个不超过N的非负整数加起来,使它们的和为N,一共有多少种方法. 设d(i, j)表示j个不超过i的非负整数之和为i的方法数. d(i, j) = sum{ d(k, j-1) | 0 ≤ k ≤ ...
- UVa 10288 (期望) Coupons
题意: 每张彩票上印有一张图案,要集齐n个不同的图案才能获奖.输入n,求要获奖购买彩票张数的期望(假设获得每个图案的概率相同). 分析: 假设现在已经有k种图案,令s = k/n,得到一个新图案需要t ...
- objective-c里的方法指针IMP的用法
SGPopSelectView.h @interface SGPopSelectView : UIView @property (nonatomic, assign) SEL selector; @p ...
- POJ 2584 T-Shirt Gumbo (二分图多重最大匹配)
题意 现在要将5种型号的衣服分发给n个参赛者,然后给出每个参赛者所需要的衣服的尺码的大小范围,在该尺码范围内的衣服该选手可以接受,再给出这5种型号衣服各自的数量,问是否存在一种分配方案使得每个选手都能 ...