1.Github项目地址:

https://github.com/ataiyang/ls

2.PSP表格

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

3.解题思路

刚刚拿到题目时一脸懵逼,后来上网查了相关资料了后,发现了一种随机的方式,网上那个是解数独的方法,我将它改装了一下,大致思路是这样的:按顺序一个个随机,当每个随机时去判断每行每列及所在宫里是否有相同的数,如果有,该位置重新随机,并记录次数,当重新随机次数超过50时,从头开始随机,如果没有,随机下一个位置的数,如果填满了九宫格,则算一次成功,输出。(为什么是50,因为刚开始时是10,时间太长了2.5分钟,改成20,时间20几秒,改成30,时间18秒,40时间15秒,50时间13~14秒)。

遇到的困难及学习的新知识

时间上有点久后来记录错误的参数变大,就解决了。

命令行传参原本不会,百度去了解后会了。

输出到文件也是原本不会,后也去百度了解解决了。

4.设计实现

没有类,2个函数,一个函数用来完成填一个九宫格的过程,一个函数用来实现判断是否符合数独的规律,后来将第一个函数移到主函数中了。

5.代码说明

这是判断的主要代码:

	for (m = 0, n = j; m < 9; m++) {//判断行里是否有重复的数
if (a[m][n] == a[i][j] && m != i) {
return 0;
}
}
for (m = i, n = 0; n < 9; n++) {//判断列里是否有重复的数
if (a[m][n] == a[i][j] && n != j) {
return 0;
}
}
p = i / 3;
q = j / 3;
for (m = p * 3, n = q * 3; m < (p + 1) * 3;) {//判断本宫里是否有重复的数
if (a[m][n] == a[i][j] && m != i&&n != j) {
return 0;
}
else {
if (n < (q * 3 + 2)) {
n++;
}
else {
n = q * 3;
m++;
}
}
}

这是填空的主要代码:

	for (l = 0; l < n; l++) {
int a[9][9] = { 0 };//九宫格初始化
int i, j, m, n, x, k = 0;
for (i = 0, j = 0; i != 9;) {
if (i == 0 && j == 0) {//学号后2位为23,所以是6
a[i][j] = 6;
k = 1;
}
if (k == 0) {
a[i][j] = rand() % 9 + 1;//填当前格
}
if (judge(a, i, j)) {
if (j < 8) {
j++;
k = 0;
}
else {
i++;
j = 0;
k = 0;
}
}
else if (k<50) {//k用来记录当前格错误次数,当超过50个时,从头开始
k++;
a[i][j] = rand() % 9 + 1;
}
else if (k == 50) {
k = 0;
for (i = 0, j = 0; i < 9;) {//重新初始化
a[i][j] = 0;
if (j < 8) { j++; }
else {
j = 0;
i++;
}
}
i = 0;
j = 0;
}
}

6.测试运行

这是运行结果的部分截图:

7.性能分析

这是性能分析的截图:

8.学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
1 120 120 24 24 学会很多小技巧,命令行传参,输出到文件之类

9.执行力 、 泛泛而谈 的理解

我认为,执行力就是实际去做事情,将想法付诸行动实现的能力,而泛泛而谈就是说个大概,列举出很多在做之前的想法为了将来做事情做准备,两者都是有用的,大概就是这样了。

sudoku作业的更多相关文章

  1. 第二次作业——个人项目实战(Sudoku)

    Github:Sudoku 项目相关要求 利用程序随机构造出N个已解答的数独棋盘 . 输入 数独棋盘题目个数N 输出 随机生成N个 不重复 的 已解答完毕的 数独棋盘,并输出到sudoku.txt中, ...

  2. 17秋 软件工程 第二次作业 sudoku

    2017年秋季 软件工程 作业2:个人项目 sudoku Github Project Github Project at Wasdns/sudoku. PSP Table PSP2.1 Person ...

  3. 软工实践作业2:个人项目实战之Sudoku

    Github:Sudoku 项目相关要求 项目需求 利用程序随机构造出N个已解答的数独棋盘 . 输入 数独棋盘题目个数N(0<N<=1000000). 输出 随机生成N个不重复的已解答完毕 ...

  4. Sudoku(第二次作业)

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

  5. 软工实践第二次作业-sudoku

    说明 Github项目地址 作业题目 解题思路 一开始拿到的时候,有一个思路,可以先填写全盘的"1",然后在插空填满全盘的"2".后来觉得自己理不清那个思路.遂 ...

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

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

  7. 【2019.09.19】数独(Sudoku)游戏之我见(软工实践第三次作业)

    Github项目地址:https://github.com/MokouTyan/suduku_131700101 [2019.09.20]更新:代码经过Code Quality Analysis工具的 ...

  8. ACM: ICPC/CCPC Sudoku DFS - 数独

    Sudoku Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Submis ...

  9. sudoku--SE第二次作业

    git传送门 编译环境: windows10.vs2017 所用语言: c++ 首先作为一个晚上闭眼的玩家,我先来讲一下我的心路历程: 最开始接到作业的时候心里是拒绝的,刚出了一趟小远门就这样,就很难 ...

随机推荐

  1. 以太网帧、TCP与UDP段以及IP数据报格式总结

    传输层及其以下的机制由内核提供,是操作系统的一部分,应⽤层由⽤户进程提供应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装.不同的协议层对数据包有不同的称谓,在传 ...

  2. [bzoj4832]抵制克苏恩 概率dp

    考试的时候打了个搜索,时间比较短,样例又非常的弱,实在不太清楚他这个到底是什么意思. 不过lc大神好腻害,讲解了一下非常的清楚了. f[i][j][k][l]表示第i次伤害(啊),一滴血j个,两滴血k ...

  3. 【机器学习笔记之二】决策树的python实现

    本文结构: 是什么? 有什么算法? 数学原理? 编码实现算法? 1. 是什么? 简单地理解,就是根据一些 feature 进行分类,每个节点提一个问题,通过判断,将数据分为几类,再继续提问.这些问题是 ...

  4. 巧用tab组件实现APP的布局效果

    1. 版本说明 iOS/Android支持版本 jar包版本 8.4及往后版本 2017年4月1日 2. 描述 tab布局能避免多层次钻取与返回,可以在一个报表内部进行切换,钻取层数如果过多的话,看报 ...

  5. Python第八天——Json

    json 模块 json 模块提供了非常完善的 Python 对象到 JSON 格式的转换 import json d = dict(name='Bob',age=20,score=88) json. ...

  6. mysql按某个列执行1-N排名的问题

    对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列CREATE TABLE `salaries` (` ...

  7. STL sort函数的用法

    sort在STL库中是排序函数,有时冒泡.选择等O(N^2)算法会超时时,我们可以使用STL中的快速排序O(N log N)完成排序 sort在<algorithm>库里面,原型如下: t ...

  8. Git初学二(SSH免密)

    在管理Git项目上,初学者使用HTTPS直接克隆项目到本地是最方便的.但是之后的fetch和push代码需要输入账号和密码也是比较烦的. 这章在上一章的基础上,将HTTPS切换成SSH.SSH的优点就 ...

  9. Java中的标识符和关键字

    1.标识符 含义:标识符用于给程序中的类.变量.方法命名的符号. 组成:数字(0-9).字母(a-z)(A-Z).下划线(_).美元符号$. 命名规则:1.数字不能够作为命名符号的开头 2.不能够使用 ...

  10. 【渗透笔记】利用逻辑漏洞批量拿GOV EDU

    前言: 这个Oday是以前就有的,不过都没有人出过详细的使用教程,昨天帮群里某学院拿了他们的学校之后突然想起来这个Oday,而且实用性还很强,所以我就想分享到这里来了 关键字:inurl:sitese ...