Personal Software Process Stages

时间百分比(%)

实际花费的时间 (分钟)

原来估计的时间 (分钟)

计划

0

0

0

·           估计这个任务需要多少时间,把工作细化并大致排序

0

0

0

开发

·           需求分析 (包括学习新技术)

0

0

0

·           生成设计文档

0

0

0

·           设计复审 (和同事审核设计文档)

0

0

0

·           代码规范 (制定合适的规范)

0

0

0

·           具体设计

5

30min

30min

·           具体编码

60

3h

4h

·           代码复审

5

10min

0

·           测试(自我测试,修改代码,提交修改)

30

1h

1h

总结报告

  • 测试报告
  • 计算工作量
  • 事后总结, 并提出改进

总计

100%

总用时 5H

总估计的用时 6H

总结:

感觉这次作业在算法方面难度过大,有点难以入手

对于第一个要求:每个单词仅出现一次。这个限制条件过于抽象,无法从这个角度去实现具体编码

我选择的是从【图形必须是正方形】出发

先将n的值设置位Max(WordLength)

然后在这个n*n的矩阵中以某种【特定的顺序】尝试填入所有单词

如果成功,则输出这个矩阵,else n++;

下面解释何为【特定的顺序】

首先从最具体的条件出发,即【每个角都必须有一个单词】

然后从【不能含有空行】这个条件出发,优先把四条边填满

然后将剩余的单词,填入这个矩阵中

具体做法是暴力枚举:即枚举矩阵中的每一个点,如果这个点可以放入某个单词,那么就将这个单词放入

最后将所有的空白,随机填入一个字母

此时检查【单词唯一性】问题,如果不满足,则改变单词的填入顺序

在进行测试

不得不说  这个算法思路实在是非常的烂

虽然能满足所有的限制条件

但是得到的矩阵可能非常大。。。。

因为对于【单词的交错相连】这个点

我暂时没有找到更好的方法去处理这个问题

所以得到的图可能是一个比较松散的图

这是一个测试数据的截图:

下面是用c写的源码:

(将测试数据复制入testdata文本中,将生成同目录下的一个wordoutput文本,用于显示结果)

  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. #include <string.h>
  4. #define M 300
  5.  
  6. #define sinput "testdata.txt"
  7. #define soutput "WordOutPut.txt"
  8. FILE *file,*fileout;
  9.  
  10. int used[M],i,j,k,x,maxl,l,y,n,u,t,an,ini[M],len[M],e,start,charused[M],ismin;
  11.  
  12. char a[M][M],s[M],g[M][M],sum,c[M],dx[]={,,-,,-,,-,},dy[]={,,,-,-,,,-};
  13.  
  14. int ising(int x,int y)
  15. {
  16. return (x>=&&x<n&&y>=&&y<n);
  17. }
  18.  
  19. f(int dx,int dy,int x,int y,char* s)
  20. {
  21. int i;
  22. for(i=;s[i];i++){
  23. g[x][y]=s[i];
  24. x+=dx;
  25. y+=dy;
  26. }
  27. }
  28.  
  29. int pd(int dx,int dy,int x,int y,char *s)
  30. {
  31. int i;
  32. for(i=;s[i];i++){
  33. if(!(g[x][y]==s[i]||!g[x][y])||!ising(x,y)) return ;
  34. x+=dx;
  35. y+=dy;
  36. }
  37. return ;
  38.  
  39. }
  40.  
  41. main()
  42. {
  43. file=fopen(sinput,"r");
  44. fileout=fopen(soutput,"w");
  45.  
  46. while(fscanf(file,"%s",s)>){
  47. t=strlen(s);
  48. len[an]=t;
  49. sum+=t;
  50.  
  51. if(maxl<t) maxl=t;
  52.  
  53. ini[s[]]++;
  54.  
  55. strcpy(a[an++],s);
  56. }
  57.  
  58. for(i=;i<an;i++)
  59. for(j=i+;j<an;j++) if(len[i]<len[j]){
  60. strcpy(s,a[i]);
  61. strcpy(a[i],a[j]);
  62. strcpy(a[j],s);
  63. t=len[i];
  64. len[i]=len[j];
  65. len[j]=t;
  66. }
  67.  
  68. x=;
  69. u=;
  70.  
  71. while(){
  72. for(i='a';i<='z';i++) if(ini[i]>=u&&!charused[i]){
  73. c[x++]=i;
  74. charused[i]=;
  75. }
  76.  
  77. if(x<) u--;
  78. else break;
  79. }
  80.  
  81. n=maxl;
  82.  
  83. while(){
  84.  
  85. for(i=;i<n;i++)
  86. for(j=;j<n;j++) g[i][j]=;
  87. for(i=;i<an;i++) used[i]=;
  88.  
  89. for(i=;i<;i++){
  90. x=y=;
  91. if(i==) y=n-;
  92. else if(i==) x=n-;
  93. else if(i==){
  94. x=n-;
  95. y=n-;
  96. }
  97.  
  98. j=i;
  99. for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])&&a[k][]==c[i]){
  100. used[k]=;
  101. f(dx[j],dy[j],x,y,a[k]);
  102. break;
  103. }
  104. }
  105.  
  106. ///four courner
  107. for(i=;i<;i++){
  108. x=y=;
  109. if(i==) y=n-;
  110. else if(i==) x=n-;
  111. else if(i==){
  112. x=n-;
  113. y=n-;
  114. }
  115.  
  116. for(j=;j<;j++)
  117. for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])&&a[k][]==c[i]){
  118. used[k]=;
  119. f(dx[j],dy[j],x,y,a[k]);
  120. break;
  121. }
  122. }
  123.  
  124. /*
  125.  
  126. //zhongjian
  127.  
  128. x=0;
  129. y=0;
  130. for(i=0;i<n;i++){
  131.  
  132. x++;
  133. y++;
  134.  
  135. for(j=4;j<6;j++)
  136. for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
  137. used[k]=1;
  138. used[k]=1;
  139. f(dx[j],dy[j],x,y,a[k]);
  140. break;
  141. }
  142. }
  143. */
  144.  
  145. //sibian
  146.  
  147. x=y=;
  148. for(i=;i<n;i++){
  149.  
  150. y++;
  151.  
  152. j=;
  153. for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
  154. used[k]=;
  155. used[k]=;
  156. f(dx[j],dy[j],x,y,a[k]);
  157. break;
  158. }
  159. }
  160.  
  161. x=;
  162. y=n-;
  163. for(i=;i<n;i++){
  164.  
  165. x++;
  166.  
  167. j=;
  168. for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
  169. used[k]=;
  170. used[k]=;
  171. f(dx[j],dy[j],x,y,a[k]);
  172. break;
  173. }
  174. }
  175.  
  176. x=n-;
  177. y=n-;
  178. for(i=;i<n;i++){
  179. y--;
  180.  
  181. j=;
  182. for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
  183. used[k]=;
  184. used[k]=;
  185. f(dx[j],dy[j],x,y,a[k]);
  186. break;
  187. }
  188. }
  189.  
  190. x=n-;
  191. y=;
  192. for(i=;i<n;i++){
  193.  
  194. x--;
  195.  
  196. j=;
  197. for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
  198. used[k]=;
  199. used[k]=;
  200. f(dx[j],dy[j],x,y,a[k]);
  201. break;
  202. }
  203. }
  204.  
  205. for(i=;i<n;i++)
  206. for(j=;j<n;j++)
  207. for(l=;l>=;l--)
  208. for(k=;k<an;k++) if(!used[k]&&pd(dx[l],dy[l],i,j,a[k])){
  209. used[k]=;
  210. f(dx[l],dy[l],i,j,a[k]);
  211. break;
  212. }
  213.  
  214. ismin=;
  215.  
  216. for(i=;i<an;i++) if(!used[i])
  217. ismin=;
  218.  
  219. if(ismin) n++;
  220.  
  221. else{
  222. srand();
  223. for(i=;i<n;i++){
  224. for(j=;j<n;j++) if(g[i][j]) fprintf(fileout,"%c",g[i][j]); else fprintf(fileout,"%c",rand()%+'a');
  225. fputs("\n",fileout);
  226. }
  227. return ;
  228. }
  229.  
  230. }
  231. }

【现代程序设计】【homework-04】的更多相关文章

  1. 现代程序设计homework——04

    题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...

  2. 标准C程序设计七---04

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  3. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

  4. nVIDIA SDK White Paper ----Vertex Texture Fetch Water

    http://blog.csdn.net/soilwork/article/details/713842 nVIDIA SDK White Paper ----Vertex Texture Fetch ...

  5. 小兔JS教程(五) 简单易懂的JSON入门

    上一节的参考答案: http://xiaotublog.com/demo.html?path=homework/04/index2 本节重点来介绍一下JSON,JSON(JavaScript Obje ...

  6. 软工+C(9): 助教指南,持续更新...

    上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...

  7. 20145218 《Java程序设计》第04次实验报告

    北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.22 实验名称:Android开发基础 一.实验内容 1.基于Android ...

  8. [连载]Java程序设计(04)---任务驱动的方法:工资结算系统

    任务:或在公司,该公司将其分为三类人员:部门经理.销售员.在发工资的时候,部门经理拿固定月薪8000元.技术人员按每小时100元领取月薪.销售人员依照500元底薪加当月销售额的4%进行提成.设计并实现 ...

  9. 20172319 2018.04.01-04.11 《Java程序设计》第5周学习总结

    20172319 2018.04.01-04.11 <Java程序设计>第5周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错 ...

  10. 20172319 2018.04.11-16 《Java程序设计教程》 第6周学习总结

    20172319 2018.04.11-16 <Java程序设计教程>第6周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题 ...

随机推荐

  1. lib和dll文件的区别和联系

    什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态 ...

  2. Why does yum return error: [Errno 256] No more mirrors to try ?

    https://access.redhat.com/solutions/203603 ISSUE yum update fails with the error : [Errno 256] No mo ...

  3. linux mysql为root用户初始化密码和改变root密码

    初始化密码: 由于安装MySQL完后,MySQL会自动提供一个不带密码的root用户,为了安全起见给root设置密码: #mysqladmin -u root password 123 (123为密码 ...

  4. C# Winform应用程序占用内存较大解决方法整理

     微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其 ...

  5. POJ1850——Code(组合数学)

    Code DescriptionTransmitting and memorizing information is a task that requires different coding sys ...

  6. P143、面试题25:二叉树中和为某一值的路径

    题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.二叉树结点的定义如下:struct BinaryTreeNode ...

  7. AOSP

    定义编辑 "Android Open-Source Project"的缩写 中文意为"Android 开放源代码项目" 内容编辑 在Android Open-S ...

  8. ASCII码表详解

    第一部分:ASCII非打印控制字符表 ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备.例如,12代表换页/新页功能.此命令指示打印机跳到下一页的开头.(参详ASCII码表 ...

  9. VS2005下开发PPC2003和WM50编译器一些设置

    1.vs2005开发WM5时,编译器和linker的选项配合问题 链接:http://www.mivi.name/blog/index_en.php?itemid=258 首先说ARM4 ARM4T ...

  10. 给枚举加上Description,必要时,可以直接获取枚举类型代表的中文

    http://www.cnblogs.com/lyl6796910/p/3958768.html