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++时候得出结果的那种满足感。不过还是有点思考不够仔细,在一些小细节方面出错,然后改半天。现在的我还是有严重拖延症,就比如这次作业,一开始想到了一点思路,但是就是没马上去写,过了一天又重新想了下。真真有点浪费之间!

《构建之法》中有一篇文章说“没有天生的天才”。我想虽然我在计算机这方面不是很强,但是也可以通过联系努力靠近那个目标。

随机推荐

  1. SVN:Cleanup failed to process the following paths

    频繁使用SVN,于是乎玩坏了.用了一下clearup,结果爆了如题错误.查了一下,是有文件被加锁了,位置在项目根目录 .svn下的wc.db 里,需用专门工具才能看到里面.就是个数据库,里面有很多表. ...

  2. HDU 5067 Harry And Dig Machine:TSP(旅行商)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 题意: 给你一个n*m的地图,地图上标着对应位置的石子数.你从左上角出发,每次可以向上下左右四个 ...

  3. 设计模式之Iterator模式

    STL里的iterator就是应用了iterator模式. 一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator按顺 ...

  4. JavaScript入门之Canvas(一): 2D Context

    概念 Canvas    是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形.例如,它可以用于绘制图形,制作照片,创建动画,甚至可以进行实时视频处理或渲染.自HTML5添 ...

  5. asp.net mvc 动态编译生成Controller

    做网站后台管理系统的时候,有时我们需要根据用户的录入配置动态生成一些频道,这些频道需要用到独立的Controller,这时就需要用到运行时动态编译了.代码如下: using System.Web.Mv ...

  6. java‘小秘密’系列(二)---Integer

    java'小秘密'系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java'小秘 ...

  7. Ecshop商品描述上传中文名图片无法显示解决方法

    在后台上传商品图片的时候,如果你选择一个中文名称的图片,那么上传后会产生乱码,导致图片显示不出来. 下面说一种解决办法:使用"年月日时分秒 + 6个随机字符"做为文件名,如 201 ...

  8. Andrew Ng机器学习课程笔记--week6(精度&召回率)

    Advice for applying machine learning 本周主要学习如何提升算法效率,以及如何判断学习算法在什么时候表现的很糟糕和如何debug我们的学习算法.为了让学习算法表现更好 ...

  9. poj2051 Argus

    Description A data stream is a real-time, continuous, ordered sequence of items. Some examples inclu ...

  10. 堆排序—Java

    堆排序: 一棵完全二叉树,如果父节点的值大于等于左右节点的值,则称此完全二叉树为小根堆(小顶堆):如果父节点的值小于等于左右节点的值,则次完全二叉树为大根堆(大顶堆). 堆排序是建立在大顶堆或小顶堆的 ...