这个作业属于哪个课程 |
https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 |
这个作业要求在哪里 |
https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494 |
这个作业的目标 |
实现一个命令行程序,不妨称之为Sudoku |
作业正文 |
如下 |
其他参考文献 |
百度 |
1、Github项目地址
https://github.com/qqxy799/20177602
2、PSP表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
20 |
60 |
Estimate |
估计这个任务需要多少时间 |
600 |
1000 |
Development |
开发 |
360 |
540 |
Analysis |
需求分析 (包括学习新技术) |
60 |
240 |
Design Spec |
生成设计文档 |
30 |
40 |
Design Review |
设计复审 |
20 |
30 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
20 |
20 |
Design |
具体设计 |
40 |
60 |
Coding |
具体编码 |
60 |
150 |
Code Review |
代码复审 |
30 |
30 |
Test |
测试(自我测试,修改代码,提交修改) |
30 |
30 |
Reporting |
报告 |
20 |
20 |
Test Repor |
测试报告 |
20 |
20 |
Size Measurement |
计算工作量 |
20 |
20 |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
20 |
30 |
合计 |
|
1350 |
2290 |
3、思路描述
1、了解数独的规则,完成数独的算法
2、用cmd命令行的形式来读出写入文件
3、进行性能改进以及单元测试
4、代码说明
#define _CRT_SECURE_NO_DEPRECATE #include <fstream> #include<iostream> #include<stdio.h> using namespace std; int main(int argc, char* argv[]) { int m, n; FILE* fp1; FILE* fp2; m = atoi(argv[2]);//命令行输入的第三个参数:宫格阶级 n = atoi(argv[4]);//命令行输入的第五个参数:待解答盘面数目 //以文本只读方式打开intput.txt fp1 = fopen("input.txt", "r"); if (fp1 == NULL) //打开文件失败 return -1; //打开output.txt,并立即关闭 fp2 = fopen("output.txt", "w"); if (fp2 == NULL) //打开文件失败 return -1; fclose(fp2);//关闭文件 int i, j, k, num, w, p, q; int sudoku[10][10]; int sign[4] = { 0 };//存放行列中已经出现的数 fp2 = fopen("output.txt", "a"); for (num = 0; num < n; num++) { //输入表盘的二维数组 for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { fscanf(fp1, "%d", &sudoku[i][j]); } } while (1) { w = 0; //判断表盘中是否还有未填数的空格 for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { if (sudoku[i][j] == 0) { w++; } } } if (w == 0)//表示表盘已经填完 { break; } for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { if (sudoku[i][j] != 0) continue; //若该空格为填入,则进行行列遍历,找到已出现的数 if (sudoku[i][j] == 0) { //行遍历 for (q = 0; q < 3; q++) { if (sudoku[i][q] != 0) { sign[sudoku[i][q]] = 1; } } //列遍历 for (q = 0; q < 3; q++) { if (sudoku[q][j] != 0) { sign[sudoku[q][j]] = 1; } } p = 0;//p用于记录该空格的候选数数量 for (q = 1; q < 4; q++) { if (sign[q] == 0)//表示该空格所在行列中均没有q { p++; k = q; } } } if (p == 1) { sudoku[i][j] = k; } //初始化sign[] for (q = 0; q < 4; q++) { sign[q] = 0; } } } } //输出完整表盘 for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { fprintf(fp2, "%d ", sudoku[i][j]); if (j == 2) fprintf(fp2, "
"); } } fprintf(fp2, "
"); } return 0; }
|
5、调试以及输入输出
6、总结
在众多大佬以及网络上的各种搜索资料的帮助下,终于是完成了这次作业。通过这次的作业,更是学到了不少东西,典型的就是github。希望能够在以后的学习中,更上一层楼。
<iframe src="https://free.modao.cc/app/9b2570508a478d7ab4dfa65e447133fc2010d7e9/embed/v2" width="500" height="1000" allowTransparency="true" frameborder="0"></iframe>