2020软件工程作业03
软件工程 | |
---|---|
作业要求 | |
作业目标 | |
作业正文 | 如下 |
参考文献 |
1、Github项目地址
https://github.com/magicvie/test1/blob/master/20177715.html
2、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(min) | 实际耗时(min) |
---|---|---|---|
Planning | |||
Estimate | |||
Development | |||
Analysis | |||
Design Spec | |||
Design Review | |||
Coding Standard | |||
Design | |||
Coding | |||
Code Review | |||
Test | |||
Reporting | |||
Test Repor | |||
Size Measurement | |||
Postmortem & Process Improvement Plan | |||
合计 |
三、解题思路
题目要求
1.实现一个命令行程序,不妨称之为Sudoku。数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。
2.三宫格:盘面是3*3。使1-3每个数字在每一行、每一列中都只出现一次,不考虑宫。
3.用cmd命令行的形式读出写入文件,并传入参数。
4、实现过程
自己太菜基础不扎实,到网上查找资料,给胡某大佬打电话求教,搞了好久没什么进展。。。。。。
几乎完全搞不懂怎么写,到最后都没有达到规范
5.代码说明
import java.util. Scanner;
class NinePalace[
public
static void main(String[]
args)l
// 定义N为九宫格的行列数,需要输入
System. out printn("请输入九宫格的行列规模(只能是奇数的)");Scanner n = new Scanner(System in);
int N;
//判断格局是否奇数( 可判断出偶数、负数及小数)
double d;
while (true){
d = n.nextDouble0;
N = (int)d;
if ((dN)>1.0E-4|N%2==0|N<0)
{System.out.printIn("输入出错格局只能是正奇数。请重新输入"):}
else break;
1/老师的九宫格填写方法
int[][] result = new int[N][N]; //定 义保存九宫格的数组
int row= 0;行初始位置
int col = N/2;列初始位置,因为列由0开始,故N/2 是中间位置for (int i=1; i<=N*N; i++){
result [row][col] = i;
rOW--;
col++; ;
if (row<0&&col>=N)(co1-- ;row+=2;] AF 7lẳšß#tÈ 5else if (row<0){ row = N-1;} //行越界
else if (col>=N){col = 0:}//列越界
3else if (result[row][col] != 0)(col--;row+=2;// iÆ
//打印出九宫格
for (int i=0; i<N;
i++)
for(int j=0; j<N; j++)(System.out.print(result[j][]+"t");)System.out. printlnO;
//我个人的填格方式
int[][] result2 = new int[N][N]://为免冲突, 重新new一个数组
result2[N/2]N/2] = (N*N+1)/2; /先把中间值赋予中间位置
row= 0; //定义 行及列的初始赋值位置。之前赋值的for对两个值有影响,故需
重新定位
col = N/2;
for (int i=1; i<=N*N/2; i++){
result2[row][co1] = i
//下面这句是把跟i对应的值放到格局对应的位置上result2[N-row-1][N-col-1] = N*N+1-i;
row--;
col++;
if (row<0){ row = N-1;} //行越界
else if (colI>=N){col = 0:}//列越 界
else if (result2[row][co1] != 0){o-row+=2:}/有冲突
//这方法不可能出现行列两边都越界的情祝,详情需要数学论证}
System.out.printlnO;
//1 再次打印出九宫格,以对比验证
for (int i=0; i<N; i++){
for(int j=0; j<N; j++){System.out. print(result2[][j]+" "):}System.out. printlnO;
}}
运行结果