One.1
Github地址:https://github.com/zyp031502148/zyp1
解题思路:
看到数独这个题目的时候,我就想到了平时自己玩数独之后一开始怎么做的,可是发现那样的话需要先出一个题目,感觉有点蒙。后来把题目看完,才相知道是做出完整的数独,这样好像有点思路。在百度上搜了下,发现其实写数独是大概是通用几个方法的。由于要生成多个不同的数独,我是先把第一行设置成随机数,后面按照数独玩法检查,先检查同一行中有没有相同数,在检查同一列中有没有相同数,最后在检查小方格里面有没有相同数。在用递归算法求出每一行的数据。最后用一个主函数实现程序。
设计实现:
结合解题思路,我就想先拿一个函数(gtShuDu())实现检查数据的功能,在用一个函数(kaishi)实现完成整个数独矩阵,再用一个主函数(main())实现能形成N个数独矩阵功能。
代码说明:
if(shudu[a][i]!=num)//检查同一行里有没有num这个数,没有则 进入下一个检查
{
jie=true;
}
else
{
jie=false;
break;
}
if(jie)//检查同一列中有没有num这个数,没有则进入下一个检查
{
for(int j=1;j<a;j++)
{
if(shudu[j][b]==num)
{
jie=false;
}
}
}
if(jie)//检测小方格中有没有数字num
{
int fangge1,fangge2;
fangge1=a-a%3+1;
fangge2=b-b%3+1;
if(a%3==0)//这里是特殊情况,因为当余数为0时,根据上面设计会检查到下一个小方格而不是当前方格中。
fangge1=a-2;
if(b%3==0)
fangge2=b-2;
for( int t = 0 ; t < 3 ; t++ )
{
if( jie == false )
break;
for( int r = fangge2 ; r < fangge2+3 ; r++ )
{
if( shudu[fangge1][r] == num )
{
jie = false;
break;
}
}
fangge1++;
}
}
测试运行:
程序运行

实现数据

改进进程:
由于之前有参考别人的解题思路,便把代码按照思路这样写,改了很多遍,把一开始想用一个整数来判断条件的,现在用一个bool值来判断。然后都用if条件语句执行判断。比之前用整数来省了一些代码。
实际花费时间:
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 15 | 15 |
| · Estimate | · 估计这个任务需要多少时间 | 4天 | 5天 |
| Development | 开发 | 240 | 320 |
| · Analysis | · 需求分析 (包括学习新技术) | 240 | 360 |
| · Design Spec | · 生成设计文档 | 60 | 60 |
| · Design Review | · 设计复审 (和同事审核设计文档) | ||
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | ||
| · Design | · 具体设计 | 540 | 540 |
| · Coding | · 具体编码 | 800 | 900 |
| · Code Review | · 代码复审 | 180 | 240 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 240 | 600 |
| Reporting | 报告 | ||
| · Test Report | · 测试报告 | ||
| · Size Measurement | · 计算工作量 | ||
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | ||
| 合计 |
实践之后:
一开始其实是有点蒙的,写完第一版代码之后,结果老是出错,一开始是出现的第一排随机数都一样,后来我把随机种子从kaishi函数中放到主函数之内才解决。因为间隔时间太短导致种子一样,出来的结果也就一样。后来又出现了第一排正常,之后7排都是初始数据,没能出来结果,回去检查才发现是检查每一行有没有相同数据的那块出现问题,if条件没设对;改完条件又出现方格里面会出现重复数字,又去检查方格那块代码。发现是特殊情况没有可考虑到。当除以3得出的余数为0 是会到下一个方格中检查,所以检查不彻底会出现错误。终于改完所有错误之后才把结果设置输出到文件中。
这次实践是一个预热,我有找回那种当初写c++时候得出结果的那种满足感。不过还是有点思考不够仔细,在一些小细节方面出错,然后改半天。现在的我还是有严重拖延症,就比如这次作业,一开始想到了一点思路,但是就是没马上去写,过了一天又重新想了下。真真有点浪费之间!
《构建之法》中有一篇文章说“没有天生的天才”。我想虽然我在计算机这方面不是很强,但是也可以通过联系努力靠近那个目标。
随机推荐
- 有关XSS的一个系列教程
在乌云发现了一个有关XSS的教程,目前有21篇,够我慢慢儿学的了. 这个系列教程的地址:http://www.wooyun.org/whitehats/心伤的瘦子/page/1 几个常见的语句 < ...
- Cox回归模型【生存分析】
参考:<复杂数据统计方法--基于R的应用> 吴喜之 在生存分析中,研究的主要对象是寿命超过某一时间的概率.还可以描述其他一些事情发生的概率,例如产品的失效.出狱犯人第一次犯罪.失业人员第一 ...
- 表空间移动(transporting tablespaces)
--表空间移动(transporting tablespaces) --------------------------------------2014/01/15 1. 表空间传输步骤简介. ...
- SQL语句Tips
1. 可以在FROM字句中指定多个表,表与表之间用逗号隔开,如下面所示. SELECT * FROM T1,T123 结果集是这两个表的笛卡尔乘积.
- Java企业微信开发_05_消息推送之发送消息(主动)
一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...
- java集合判断
java开发中经常需要做集合判断,在这里mark一下,加强记忆 为空判断: null == applyList || applyList.size() ==0 非空判断: applyList != n ...
- JVM内存概览与GC初步
一.JVM内存空间概览 Java虚拟机使用的内存块包含 栈空间Stack (虚拟机栈.本地方法栈).堆空间 Heap Memory .永久区 Perm Gen(related to method ar ...
- 将Windows系统默认的Administrator帐号改名为我们自定义的名称
将Windows系统默认的Administrator帐号改名为我们自定义的名称.. ---------如何将Administrator帐号改名为我们自定义的名称:Win+R--->>输入g ...
- 一个C#操作RabbitMQ的完整例子
一.下载RabbitMQ http://www.rabbitmq.com/install-windows.html 二.下载OTP http://www.erlang.org/downloads 三. ...
- 50行Python代码构建小型区块链
本文介绍了如何使用python构建一个小型的区块链技术,使用Python2实现,代码不到50行. Although some think blockchain is a solution waitin ...