现代程序设计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周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题 ...
随机推荐
- latex 三线表
LaTeX 处理三线表相当简单方便.用到的宏包主要是 booktabs .代码如下: 需要添加包:\usepackage{booktabs}. \documentclass{article} \use ...
- Catalog与Schema
按照SQL标准的解释,在SQL环境下Catalog和Schema都属于抽象概念,可以把它们理解为一个容器或者数据库对象命名空间中的一个层次,主要用来解决命名冲突问题.从概念上说,一个数据库系统包含多个 ...
- iOS开发:mac使用svn管理项目
记录mac下常用的svn命令: 1.检出项目: svn checkout .../svn/projectName --username=xxx --password=xxx //将ip换成svn服务器 ...
- UVa 11995 I Can Guess the Data Structure!
做道水题凑凑题量,=_=||. 直接用STL里的queue.stack 和 priority_queue模拟就好了,看看取出的元素是否和输入中的相等,注意在此之前要判断一下是否非空. #include ...
- bzoj1567: [JSOI2008]Blue Mary的战役地图
将矩阵hash.s[0]忘了弄成0,输出中间过程发现了. hash.sort.判重.大概这样子的步骤吧. #include<cstdio> #include<cstring> ...
- Codeforces Round #273 (Div. 2)
A. Initial Bet 题意:给出5个数,判断它们的和是否为5的倍数,注意和为0的情况 #include<iostream> #include<cstdio> #incl ...
- Android异常之 unable to write jarlist cache file
异常: android开发调试时候不能运行,出现 unable to write jarlist cache file 错误. 解决方法: 1.找到appcompt文件夹如下的位置.
- codevs 1218 疫情控制
啊好烦这道题.... 基本思路网上都有. 注意的一点是在匹配的时候,如果有军队的来源没有被匹配到,那么就先匹配这个来源.(因为不花钱). 不过数据好水.... #include<iostream ...
- POJ 2388 Who's in the Middle (快速选择算法:O(N)求数列第K大)
[题意]求数列中间项. ---这里可以扩展到数列第K项. 第一次做的时候直接排序水过了= =--这一次回头来学O(N)的快速选择算法. 快速选择算法基于快速排序的过程,每个阶段我们选择一个数为基准,并 ...
- mysql 自旋锁
自旋(spin)是一种通过不间断地测试来查看一个资源是否变为可用状态的等待操作,用于仅需要等待很短的时间等待所需资源的场景.使用自旋这种“空闲循环(busy-loop)”来完成资源等待的方式要比通过上 ...