现代程序设计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周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题 ...
随机推荐
- linux kernel启动流程
linux kernel启动是从./init/main.c中开始的,其大概流程是: 1. 调用start_kernel()函数: 2. start_kernel()调用rest_init()函数: 3 ...
- ios摇一摇
-(void) motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { if (motion==UIEventSubtypeMo ...
- Mybatis的if test字符串比较问题
1. Mybatis判断字符串是否为空的变态写法 <if test="bussSceneIsNull =='0'.toString() "> <![CDATA[ ...
- ArrayList和List之间的转换
开发中不免碰到List与数组类型之间的相互转换,举一个简单的例子: package test.test1; import java.util.ArrayList; import java.util.L ...
- 终极解决方案:windows10开机黑屏,死机
windows10开机黑屏,死机一般情况都是由于双显卡中的独立显卡驱动造成的! 那么试着升级一下你的BIOS吧!一定要在官网下载你对应的BIOS驱动,然后双击安装,这个时候就别再动机子了,让他自己刷新 ...
- bzoj2005: [Noi2010]能量采集
lsj师兄的题解 一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) * 2 - 1. 设g(i)为 gcd(x, y) = i ( 1 < ...
- html之marquee详解[转]
该标签不是HTML3.2的一部分,并且只支持MSIE3以后内核,所以如果你使用非IE内核浏览器(如:Netscape)可能无法看到下面一些很有意思的效果该标签是个容器标签语法: <marquee ...
- noip2001提高组题解
今天继续感动滚粗.第一次提交170分,不能多说. 第一题:一元三次方程 明明是寒假讲分治的时候做过的题居然还是WA而且只拿了60分,说明知识掌握实在不够牢固. 寒假做的是保留4位小数,原题只保留2位, ...
- 【转】IOS 计时器 NSTimer
原文网址:http://blog.csdn.net/tangshoulin/article/details/7644124 1.初始化 + (NSTimer *)timerWithTimeInterv ...
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...