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文本,用于显示结果)

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#define M 300 #define sinput "testdata.txt"
#define soutput "WordOutPut.txt"
FILE *file,*fileout; int used[M],i,j,k,x,maxl,l,y,n,u,t,an,ini[M],len[M],e,start,charused[M],ismin; char a[M][M],s[M],g[M][M],sum,c[M],dx[]={,,-,,-,,-,},dy[]={,,,-,-,,,-}; int ising(int x,int y)
{
return (x>=&&x<n&&y>=&&y<n);
} f(int dx,int dy,int x,int y,char* s)
{
int i;
for(i=;s[i];i++){
g[x][y]=s[i];
x+=dx;
y+=dy;
}
} int pd(int dx,int dy,int x,int y,char *s)
{
int i;
for(i=;s[i];i++){
if(!(g[x][y]==s[i]||!g[x][y])||!ising(x,y)) return ;
x+=dx;
y+=dy;
}
return ; } main()
{
file=fopen(sinput,"r");
fileout=fopen(soutput,"w"); while(fscanf(file,"%s",s)>){
t=strlen(s);
len[an]=t;
sum+=t; if(maxl<t) maxl=t; ini[s[]]++; strcpy(a[an++],s);
} for(i=;i<an;i++)
for(j=i+;j<an;j++) if(len[i]<len[j]){
strcpy(s,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],s);
t=len[i];
len[i]=len[j];
len[j]=t;
} x=;
u=; while(){
for(i='a';i<='z';i++) if(ini[i]>=u&&!charused[i]){
c[x++]=i;
charused[i]=;
} if(x<) u--;
else break;
} n=maxl; while(){ for(i=;i<n;i++)
for(j=;j<n;j++) g[i][j]=;
for(i=;i<an;i++) used[i]=; for(i=;i<;i++){
x=y=;
if(i==) y=n-;
else if(i==) x=n-;
else if(i==){
x=n-;
y=n-;
} j=i;
for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])&&a[k][]==c[i]){
used[k]=;
f(dx[j],dy[j],x,y,a[k]);
break;
}
} ///four courner
for(i=;i<;i++){
x=y=;
if(i==) y=n-;
else if(i==) x=n-;
else if(i==){
x=n-;
y=n-;
} for(j=;j<;j++)
for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])&&a[k][]==c[i]){
used[k]=;
f(dx[j],dy[j],x,y,a[k]);
break;
}
} /* //zhongjian x=0;
y=0;
for(i=0;i<n;i++){ x++;
y++; for(j=4;j<6;j++)
for(k=0;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
used[k]=1;
used[k]=1;
f(dx[j],dy[j],x,y,a[k]);
break;
}
}
*/ //sibian x=y=;
for(i=;i<n;i++){ y++; j=;
for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
used[k]=;
used[k]=;
f(dx[j],dy[j],x,y,a[k]);
break;
}
} x=;
y=n-;
for(i=;i<n;i++){ x++; j=;
for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
used[k]=;
used[k]=;
f(dx[j],dy[j],x,y,a[k]);
break;
}
} x=n-;
y=n-;
for(i=;i<n;i++){
y--; j=;
for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
used[k]=;
used[k]=;
f(dx[j],dy[j],x,y,a[k]);
break;
}
} x=n-;
y=;
for(i=;i<n;i++){ x--; j=;
for(k=;k<an;k++) if(!used[k]&&pd(dx[j],dy[j],x,y,a[k])){
used[k]=;
used[k]=;
f(dx[j],dy[j],x,y,a[k]);
break;
}
} for(i=;i<n;i++)
for(j=;j<n;j++)
for(l=;l>=;l--)
for(k=;k<an;k++) if(!used[k]&&pd(dx[l],dy[l],i,j,a[k])){
used[k]=;
f(dx[l],dy[l],i,j,a[k]);
break;
} ismin=; for(i=;i<an;i++) if(!used[i])
ismin=; if(ismin) n++; else{
srand();
for(i=;i<n;i++){
for(j=;j<n;j++) if(g[i][j]) fprintf(fileout,"%c",g[i][j]); else fprintf(fileout,"%c",rand()%+'a');
fputs("\n",fileout);
}
return ;
} }
}

【现代程序设计】【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. 用CImage类来显示PNG、JPG等图片

    系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:实现VC单文档.对话框程序显示图片效果 CImage 是VC.NET中定义的一种MFC/ATL共享类,也是A ...

  2. linux为命令取别名

    在linux的命令中,有些命令很长并且经常使用到,我们可以为命令添加一个别名,格式如下: $ alias 别名='命令' 例如: # 列出home文件夹的文件 $ alias lsh='ls -l / ...

  3. codeforces #310 div1 D

    一开始写了个暴力模拟绳子的摆动轨迹 然后在Test 16 T掉了 后来%了一下别人的代码,发现需要对特殊情况进行特殊处理 首先我们考虑绳子的向右摆动,设当前位置为p,绳子当前长度为L 如果其旋转中心位 ...

  4. UIcollectionView的使用(首页的搭建2)

    2.2 直接购买的UIcollectionCell 2.2.1创建CFPromptBuyCell,继承自UICollectionViewCell,定义了标题和图片两个属性 2.2.2 在.m文件中定义 ...

  5. ArcGIS学习记录—dbf shp shx sbn sbx mdb adf等类型的文件的解释

    原文地址: ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释 - Silent Dawn的日志 - 网易博客 http://gisman.blog.163.c ...

  6. Move to Another Changelist

    Move to Another Changelist 将选中的文件转移到其他的 Change list 中. Change list 是一个重要的概念,这里需要进行重点说明.很多时候,我们开发一个项目 ...

  7. PHP 的面向方面编程

    面向方面编程(AOP)对于PHP来说是一个新的概念.现在PHP对于 AOP 并没有官方支持,但有很多扩展和库实现了这个特性.本课中,我们将使用 Go! PHP library 来学习 PHP 如何进行 ...

  8. netty 实现socket服务端编写

    import java.net.InetSocketAddress; import io.netty.bootstrap.ServerBootstrap; import io.netty.channe ...

  9. Redis文档

    http://manual.csser.com/redis/connection/auth.html

  10. 武汉北大青鸟解读2016年10大IT热门岗位

    武汉北大青鸟解读2016年10大IT热门岗位 2016年1月5日 13:37 北大青鸟 这是IT从业者的辉煌时代,IT行业的失业率正处在历史的低点,而且有的岗位——例如网络和安全工程师以及软件开发人员 ...