sudoku作业
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作业的更多相关文章
- 第二次作业——个人项目实战(Sudoku)
Github:Sudoku 项目相关要求 利用程序随机构造出N个已解答的数独棋盘 . 输入 数独棋盘题目个数N 输出 随机生成N个 不重复 的 已解答完毕的 数独棋盘,并输出到sudoku.txt中, ...
- 17秋 软件工程 第二次作业 sudoku
2017年秋季 软件工程 作业2:个人项目 sudoku Github Project Github Project at Wasdns/sudoku. PSP Table PSP2.1 Person ...
- 软工实践作业2:个人项目实战之Sudoku
Github:Sudoku 项目相关要求 项目需求 利用程序随机构造出N个已解答的数独棋盘 . 输入 数独棋盘题目个数N(0<N<=1000000). 输出 随机生成N个不重复的已解答完毕 ...
- Sudoku(第二次作业)
这里是github 工具清单: 编程语言:C++ 编程IDE:XCode 效能分析工具:XCode 源代码管理平台:Github PSP2.1 PSP2.1 Personal Software Pro ...
- 软工实践第二次作业-sudoku
说明 Github项目地址 作业题目 解题思路 一开始拿到的时候,有一个思路,可以先填写全盘的"1",然后在插空填满全盘的"2".后来觉得自己理不清那个思路.遂 ...
- 第二次作业——个人项目实战(sudoku)
第二次作业--个人项目实战(sudoku) 一.作业要求地址 第二次作业--个人项目实战 二.Github项目地址 softengineering1--sudoku 三.PSP表格估计耗时 PSP2. ...
- 【2019.09.19】数独(Sudoku)游戏之我见(软工实践第三次作业)
Github项目地址:https://github.com/MokouTyan/suduku_131700101 [2019.09.20]更新:代码经过Code Quality Analysis工具的 ...
- ACM: ICPC/CCPC Sudoku DFS - 数独
Sudoku Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/65535K (Java/Other) Total Submis ...
- sudoku--SE第二次作业
git传送门 编译环境: windows10.vs2017 所用语言: c++ 首先作为一个晚上闭眼的玩家,我先来讲一下我的心路历程: 最开始接到作业的时候心里是拒绝的,刚出了一趟小远门就这样,就很难 ...
随机推荐
- cve-2017-8464 复现 快捷方式远程代码执行
cve-2017-8464 2017年6月13日,微软官方发布编号为CVE-2017-8464的漏洞公告,官方介绍Windows系统在解析快捷方式时存在远程执行任意代码的高危漏洞,黑客可以通过U盘.网 ...
- Oracle 11g DG手工switchover切换标准化流程
Oracle 11g DG手工switchover切换标准化流程 环境:RHEL 6.5 + Oracle GI 11.2.0.4 + Oracle DB 11.2.0.4 Primary RAC(2 ...
- TX2(1)--Jetson TX2 刷机并安装JetPack3.0
一般而言,刷机是在Ubuntu16.04的系统上进行,本人在ubuntu16.04系统上进行了初步的测试,暂时存在一些问题,因此建议首先配备一台Ubuntu14.04的host主机(不建议使用虚拟机) ...
- Java入门——(4)多线程
关键词:线程.Thread.Runnable.sleep().yield().join().同步 一.线程的概述 在一个操作系统中,每个独立执行的程序都可以称为一个进程,也就是"正在 ...
- win7自动关机方法
远程操控电脑的时候&爬虫的时候所需2333 win+R输入cmd,进入cmd. 输入shutdown 然后输入shutdown -s -t 3600 设置3600秒(1小时)后关机,大家可以根 ...
- Objective-C写出Json文件(可作配置文件)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #008f00 } span. ...
- WebApp开发总结
WebApp开发总结 框架的使用网络上都有教程,就不写了,主要记录下个人的开发总结以方便以后开发注意. css公用样式统一定义 css样式抽出复用 appearance: none; 取消系统默认样式 ...
- wmic 获得系统硬件信息
wmic扩展了wmi系统管理指令,提供了命令行接口和批处理执行系统管理的工具.通过别名机制将命令转为对wmi命名空间的操作 1.获得cpu信息 2.获得cpu 核数 3.获得内存条信息
- 网友RHCE认证考试经历
2014年7月,为大力推广RedHat Enterprise Linux7操作系统,红帽将基RHCE认证由RHEL6转换到RHEL7上. 面对新的软件功能.新认证课程内容,初期认证学员的考试通过率一直 ...
- MySQL (九)
1 代码执行结构 代码执行结构有三种:顺序结构.分支结构和循环结构. 1.1 分支结构 分支结构:实现准备多个代码块,按照条件选择性执行某段代码. 在MySQL中只有if分支. 基本语法 if 条件判 ...