git传送门


编译环境:

windows10、vs2017

所用语言:

c++

首先作为一个晚上闭眼的玩家,我先来讲一下我的心路历程:

       最开始接到作业的时候心里是拒绝的,刚出了一趟小远门就这样,就很难受,等回到家马不停蹄得开始写数独。前期想了挺久的,没什么头绪,挺着急的,后来在《编程之美》上看到了一种解法,觉得挺新奇的,根据题目要求,我把他改成了自己的一种思路(思路链接)。在手动验证可行性后呢,就开始编写代码了。
       因为这种思路实现起来挺简单的,编写过程中出错不多也迅速解决了,就不多赘述了,其中主要的函数为两个交换函数(行交换、列交换)
//行交换
void HS(int a, int b, int c, int d)
{
for (int j = 0; j < 3; j++)
{
sudoku[c][d + j] = sudoku[a + 1][b + j];
sudoku[c + 1][d + j] = sudoku[a + 2][b + j];
sudoku[c + 2][d + j] = sudoku[a][b + j];
}
} //列交换函数
void LS(int a, int b, int c, int d)
{
for (int j = 0; j < 3; j++)
{
sudoku[c + j][d] = sudoku[a + j][b + 2];
sudoku[c + j][d + 1] = sudoku[a + j][b];
sudoku[c + j][d + 2] = sudoku[a + j][b + 1];
}
}
       我的思路中是完成了左上角第一个九宫格的随机生成,尔后去经过行列变换生成其余的九宫格。两个函数中的参数a、b、c、d为坐标,即原始九宫格的左上角坐标(a,b),目标九宫格的左上角坐标(c,d),通过两个坐标完成九宫格的搭建。

这个时候问题来了

       理论上随机一个九宫格内的数,且左上角的数字固定的情形下,生成的数独情况只有8!种,也就是40320种,离题目要求的数还有很大的差距,该如何解决?
       因为思路中数独除去左上角的第一个九宫格是随机生成的,而其他的则是由其变化而来,而变化的顺序不影响其准确性,如下
B1 B2 B3
B4 B5 B6
B7 B8 B9
B2由B1行变化得来,B3由B2行变换得来是可行的,或者B3又B1行变换得来,B2由B3行变换得来也是允许的。B4、B7同。故而,B2、B3、B4、B7的变换便有4种不同的形式。再接着,B5、B6、B8、B9可以由B2、B3列变换得到,也可由B4、B7换变换得来,变换顺序也有4种,故而多出8种。一共就有了8440320=1290240种,理论上突破了一百万的大关。

以下是运行结果

结果图1

结果图2

单元测试

       到现在也只写出了简单的单元测试,就很难受,而且按照教程出不来覆盖率,难受成200斤的胖子。

性能分析







PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 120
· Estimate · 估计这个任务需要多少时间 1440 2880
Development 开发 120 120
· Analysis · 需求分析 (包括学习新技术)
· Design Spec · 生成设计文档
· Design Review · 设计复审 (和同事审核设计文档)
· Coding Standard · 代码规范 (为目前的开发制定合适的规范)
· Design · 具体设计 120 120
· Coding · 具体编码 120 60
· Code Review · 代码复审
· Test · 测试(自我测试,修改代码,提交修改) 1440 无穷
Reporting 报告
· Test Report · 测试报告
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 60
合计 1900 无穷
没有计时就粗略估计一下了,改代码真的会崩溃。

收获

本次的学习,收获了以下
  • 认识了以前重来没有用过的单元测试等功能,感觉自己又朝着低级程序员迈进了一步。
  • deadline才是第一生产力
  • git还是一如既往的容易出错(小白的心声)
  • 我短暂的玩耍时光没了,很难受
  • 感觉这次的作业和以往的编程有很大的区别,除了难度上,让人感觉更加的像是一个“小小小项目”,而不单单是打代码。
  • 最后收获了又一次的心态崩溃

针对执行力 、 泛泛而谈 的理解:

       执行力百度百科给出的解释是

执行力是指有效利用资源、保质保量达成目标的能力,指的是贯彻战略意图,完成预定目标的操作能力。是把企业战略、规划、目标转化成为效益、成果的关键。

对我理解而言,即是利用好我们手头能收集到的资料、优质老师资源等,保质保量得完成我们的任务,为执行力。而泛泛而谈,是我们这几年养成的一个坏习惯,所有事在说不清楚的情况下就喜欢用一些很空的词带过去,这点很坏无疑。为了改成这点,我会努力在接下来的时间内逐渐的将这些词改掉,拿出实际的数据来,希望大家指教。

第二次更新

之前跑100万的数据要几分钟,后来将vs里面的debug改成release后,只需要30秒左右就可以了

---------------------------------------持续更新(09.10)-----------------------------------------------

sudoku--SE第二次作业的更多相关文章

  1. Sudoku(第二次作业)

    这里是github 工具清单: 编程语言:C++ 编程IDE:XCode 效能分析工具:XCode 源代码管理平台:Github PSP2.1 PSP2.1 Personal Software Pro ...

  2. 第二次作业——个人项目实战(sudoku)

    第二次作业--个人项目实战(sudoku) 一.作业要求地址 第二次作业--个人项目实战 二.Github项目地址 softengineering1--sudoku 三.PSP表格估计耗时 PSP2. ...

  3. 第二次作业:卷积神经网络 part 2

    第二次作业:卷积神经网络 part 2 问题总结 输出层激活函数是否有必要? 为什么DnCNN要输出残差图片?图像复原又该如何操作? DSCMR中的J2损失函数效果并不明显,为什么还要引入呢? 代码练 ...

  4. 耿丹CS16-2班第二次作业汇总

    -- Deadline: 2016-09-28 12:00 -- 作业内容:http://www.cnblogs.com/huangjunlian/p/5891726.html -- 第二次作业总结: ...

  5. JAVA第二次作业展示与学习心得

    JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...

  6. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  7. 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...

  8. 程序设计第二次作业<1>

    面向对象程序设计第二次作业<1> Github 链接:https://github.com/Wasdns/object-oriented 题目: <1>第一次尝试 我立马认识到 ...

  9. homework-02,第二次作业——寻找矩阵最大子序列和

    经过漫漫漫~~~~~~~~~~~~~~长的编译和调试,第二次作业终于告一段落了 先放出源码,思路后面慢慢道来 #include<stdio.h> #include<stdlib.h& ...

  10. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

随机推荐

  1. [入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)

    转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识……这真的是一种很锻炼人的题型…… 每一道题的状态都不一样 ...

  2. php+mysql事务处理例子详细分析实例下载

    一.数据引擎innodb用begin,rollback,commit来实现提交事务处理,begin开始事务后出现错误就rollback事务回滚或者没有错误就commit提事务提交确认完成. start ...

  3. Jmeter==HTTP信息头管理器的作用

    HTTP信息头管理器在Jmeter的使用过程中起着很重要的作用,通常我们在通过Jmeter向服务器发送http请求(get或者post)的时候,往往后端需要一些验证信息,比如说web服务器需要带过去c ...

  4. latch相关视图整理

    latch相关视图整理(原创) V$LATCH V$LATCH视图在选取X$KSLLT记录时,进行了Group By及SUM运算,从而得出了一个汇总信息,保存了自实例启动后各类栓锁的统计信息.常用于当 ...

  5. python_cookie

    cookielib是一个自动处理cookies的模块 ## 核心类 CookieJar:是cookie的集合,可以包含很多Cookie类,是我们的主要操作对象 FileCookieJar:继承自Coo ...

  6. RSA简介(四)——求逆算法

    此处所谓求逆运算,是指在模乘群里求逆. 第一节里提到互质的两个定义: (1)p,q两整数互质指p,q的最大公约数为1. (2)p.q两整数互质指存在整数a,b,使得ap+bq=1. 只要明白了欧几里得 ...

  7. SVG交互动画制作

    前面我们已经说过了要怎样制作CSS3动画,但是SVG动画一直都没有时间研究过,正好趁现在有一点时间静下心来研究一下. 一般来说,常见前端动画实现方案分为三种,CSS3动画,HTML动画(SVG动画), ...

  8. 【VMware Workstation】NAT映射虚拟机所在网络

    配置虚拟网络编辑器 配置网络映射关系

  9. [Linux] Desktop Management

    xrandr --output Virtual1 --mode 1360x768 Extend Display Size

  10. 史上最全前端面试题(含答案)-B篇

    面试有几点需要注意面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方向↑.题目类型: 技术视野.项目细节.理论知识型题,算法题,开放性题,案例题.进行追问: 可以确保问到你开始不懂 ...