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. Mook第八周习题 单词长度(4分)(1)题

    题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以'.'结束.你要输出这行文本中每个单词的长度.这里的单词与语言无关,可以包括各种符号,比如"it's"算一个单词, ...

  2. COM编程_第一讲_深入COM框架以及实现简单的COM

    一丶我们要理解COM是什么(为什么理解) 现在很多人会用com(也就是ALT)但是不知道原理,如果改一点东西,那么整体的框架重来,因为你不懂改哪里,如果懂了,那么遇到问题,那么就会知道我要怎么做,是什 ...

  3. HDU字符串基础题(1020,1039,1062,1088,1161,1200,2017)

    并不是很精简,随便改改A过了就没有再简化了. 1020. Problem Description Given a string containing only 'A' - 'Z', we could ...

  4. GitLab Development Kit 环境搭建

    在公司内网服务器上面搭建gdk环境,踩了很多坑,历时四五天(中间涉及申请开通固定外网),整理如下: 总览: 操作系统:redhat 6.3 参考文档:https://gitlab.com/gitlab ...

  5. Redis sentinel 哨兵模式集群方案配置

    第一个方案是创建 redis cluster,第二种方案就是用哨兵模式来进行主从替换以及故障恢复.兵模式集群方案配置 一.sentinel介绍 Sentinel作用: 1):Master状态检测 2) ...

  6. Wdatepicker日期控件的使用指南 (转)

    Wdatepicker日期控件的使用指南 标签: inputclass语言functionstring正则表达式 2012-02-10 15:48 40826人阅读 评论(5) 收藏 举报 .embo ...

  7. 关于批量插入数据之我见(100万级别的数据,mysql) (转)

    因前段时间去面试,问到如何高效向数据库插入10万条记录,之前没处理过类似问题,也没看过相关资料,结果没答上来,今天就查了些资料,总结出三种方法: 测试数据库为MySQL!!! 方法一: public  ...

  8. 新鲜出炉的JSON,拿走不谢!

    一.JSON简介 1.JSON全称是JavaScript Object Notation即JavaScript对象标记法. JSON是一种轻量级(Light-Weight).基于文本的(Text-Ba ...

  9. poj 1182 食物链 带权并查集

    食物链是并查集的进阶运用的一道非常经典的题目. 题目如下: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A, ...

  10. iconfont 字库入门到精通

    字库使用必备三步骤 第一步:使用font-face声明字体 @font-face {font-family: 'iconfont'; src: url('iconfont.eot'); /* IE9* ...