zoukankan      html  css  js  c++  java
  • 软件工程实践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等等,所以还需要继续努力。

  • 相关阅读:
    HTTP请求报文与响应报文
    RTTI (Run-time type information) in C++
    Advanced C++ | Virtual Copy Constructor
    Virtual Destructor
    Advanced C++ | Virtual Constructor
    What happens when more restrictive access is given to a derived class method in C++?
    Can static functions be virtual in C++?
    Virtual functions in derived classes
    Default arguments and virtual function
    Multiple Inheritance in C++
  • 原文地址:https://www.cnblogs.com/lokk/p/11576891.html
Copyright © 2011-2022 走看看