软件工程实践2019第三次作业

一、准备

1.Github项目地址:https://github.com/lokking/031702242

2.PSP表格:

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

3.解题思路

第一步:解决文件的输入与输出;
第二步:将读取的字符型文件改为整型,建立一个结构体,里面存放的是未填单元的可填数字;
第三步:遍历数组里的每一个数字,找到需要填的空,然后如果是三、五、七宫类型的数独只需要遍历横和竖,把已经出现的数字排斥,如果是其他类型的数独的话,在遍历一下宫,把宫里面已经出现的数字排除。经过遍历以后如果可能数只剩下一个时,填入单元格。
这种方案只能解决只存在唯一解的问题。
主要函数:
Search() 用来排除在横和列中已经出现过的数字
Four()、Six()、Eight()、Nine() 用来排除待填格所对应宫已经出现过的数字
Check() 用来检查是否填完
Search():

int Search(int arr[10][10], int k1, int k2, int n)  //把k1,k2对应小格中不可能的数排除
{
	int i;
	int len = n;
	for (i = 1; i <= n; i++)
	{
		if (arr[k1][i] != 0 && i != k2)
		{
			r[k1][k2].pbnum[arr[k1][i]] = 0;
		}
	}
	for (i = 1; i <= n; i++)
	{
		if (arr[i][k2] != 0 && i != k1)
		{
			r[k1][k2].pbnum[arr[i][k2]] = 0;
		}
	}
	for (i = 1; i <= n; i++)
	{
		if (r[k1][k2].pbnum[i] == 0)
			len--;
	}
	if (len != 1)
		return 0;
	else
	{
		for (i = 1; i <= n; i++)
		{
			if (r[k1][k2].pbnum[i] == 1)
				break;
		}
		return i;
	}
}

Four():

int Four(int arr[10][10],int k1,int k2)
{
	int i, j,  x;
	int len = 4;
	if (k1 <= 2 && k2 <= 2)
	{
		for (i = 1; i <= 2; i++)
		{
			for (j = 1; j <= 2; j++)
			{
				if (arr[i][j] != 0)
				{
					r[k1][k2].pbnum[arr[i][j]] = 0;
				}
			}
		}
	}
	else if (k1 <= 2 && k2 >= 3)
	{
		for (i = 1; i <= 2; i++)
		{
			for (j = 3; j <= 4; j++)
			{
				if (arr[i][j] != 0)
				{
					r[k1][k2].pbnum[arr[i][j]] = 0;
				}
			}
		}
	}
	else if (k1 >= 3 && k2 <= 2)
	{
		for (i = 3; i <= 4; i++)
		{
			for (j = 1; j <= 2; j++)
			{
				if (arr[i][j] != 0)
				{
					r[k1][k2].pbnum[arr[i][j]] = 0;
				}
			}
		}
	}
	else
	{
		for (i = 3; i <= 4; i++)
		{
			for (j = 3; j <= 4; j++)
			{
				if (arr[i][j] != 0)
				{
					r[k1][k2].pbnum[arr[i][j]] = 0;
				}
			}
		}
	}

	for (i = 1; i <= 4; i++)
	{
		if (r[k1][k2].pbnum[i] == 0)
			len--;
		else
			x = i;
	}
	if (len == 1)
		return x;
	else
		return 0;
}  

其他几个函数类似于Four()。

4.测试

3宫格:

4宫格:

5宫格:

6宫格:

7宫格:

8宫格:

9宫格:

5.代码分析

6.性能分析


7.总结

这次作业的体会就是,不懂的还是太多很多都要从零开始,比如说怎么用github,怎么用git等等,所以还需要继续努力。

原文地址:https://www.cnblogs.com/lokk/p/11576891.html