• 软件工程实践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等等,所以还需要继续努力。

  • 相关阅读:
    android http多请求异步封装对你绝对有用
    浅论Android网络请求库——android-async-http
    Android Http异步请求,Callback
    STL慎重选择删除元素的
    iOS开展
    【Bootstrap】兼容IE8、谷歌和其他主流浏览器的观众IMAX风格的页面
    Codeforces #180 div2 C Parity Game
    vS2010 列表控件 加入右键菜单
    cocos2d-x 3.2 2048——第六部分(最后一章)
    E: 无法获取锁 /var/lib/apt/lists/lock
  • 原文地址:https://www.cnblogs.com/lokk/p/11576891.html
Copyright © 2020-2023  润新知