• 2020软件工程作业03


    软件工程 [https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1]
    作业要求 [https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494]
    作业目标 个人编写程序
    作业正文 [https://www.cnblogs.com/wufang/p/12594291.html]
    其他参考文献 [https://blog.csdn.net/Lnho2015/article/details/78632158][https://blog.csdn.net/qq_23044403/article/details/64920032?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task]

    GitHub项目地址:

    我的github项目链接:https://github.com/ShowFs/20177585/tree/master

    需求

    实现一个命令行程序,不妨称之为Sudoku。

    百度百科简介:

    数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。

    具体任务:

    现在我们想一步一步来,完成从三宫格到九宫格的进阶;完成三宫格和其他博客任务,就算过了初级考核,其他的算升级。具体各阶规则如下:

    三宫格:盘面是33。使1-3每个数字在每一行、每一列中都只出现一次,不考虑宫;
    四宫格:盘面是2
    2四个宫,每一宫又分为22四个小格。使1-4每个数字在每一行、每一列和每一宫中都只出现一次;
    五宫格:盘面是5
    5。使1-5每个数字在每一行、每一列中都只出现一次,不考虑宫;
    六宫格:盘面是23六个宫,每一宫又分为32六个小格。使1-6每个数字在每一行、每一列和每一宫中都只出现一次;
    七宫格:盘面是77。使1-7每个数字在每一行、每一列中都只出现一次,不考虑宫;
    八宫格:盘面是4
    2八个宫,每一宫又分为24八个小格。使1-8每个数字在每一行、每一列和每一宫中都只出现一次;
    九宫格:盘面是3
    3九个宫,每一宫又分为3*3九个小格。使1-9每个数字在每一行、每一列和每一宫中都只出现一次;

    PSP表格

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

    解题思路

    对于算法我并不敏感,没有办法自己根据题目条件了解到底需要什么算法,只能百度寻找类似的题目去看,一下是找到的部分解题思路:
    dfs题,从第一个空格开始填数,只填能填的数(这是一个需要判断的过程,需要边走边判断),如果当前空格填不了数字了,就退回到前一个空格能填的下一个数(回溯),直到最后一个空填上数字,就结束了。
    还有很多其他的算法·,我也看不懂就算了
    下面是部分代码:
    dfs部分
    public void dfs(int m,int n){
    for(int i = 1;i<=9;i++){
    panduan[i] = false;
    }
    if(m10){
    System.out.println("有解");
    for(int i=1;i<=9;i++){
    for(int j=1;j<=9;j++){
    System.out.print(map[i][j]);
    }
    System.out.println();
    }
    }
    else{
    judge(m, n);
    for(int i = 1;i<=9;i++){//核心步骤
    if(panduan[i]
    false){
    if(map[m][n]!=0){
    if(n9){
    dfs(m+1, 1);
    }else{
    dfs(m, n+1);
    }
    }else{
    map[m][n] = i;
    if(n
    9){
    dfs(m+1,1);
    }else{
    dfs(m,n+1);
    }
    }
    }
    }
    map[m][n] = 0;
    return;
    }
    判断部分
    public void judge(int x,int y){//用于找出当前点能填的数
    int fromX = (x-1)/33+1;
    int toX = (x-1)/3
    3+3;
    int fromY = (y-1)/33+1;
    int toY = (y-1)/3
    3+3;
    for(int i = fromX;i<=toX;i++){
    for(int j = fromY;j<=toY;j++){
    panduan[map[i][j]] = true;
    }
    }
    for(int i=1;i<=9;i++){
    panduan[map[i][y]] = true;
    panduan[map[x][i]] = true;
    }
    }

    性能测试

    说句实话,性能测试工具在装,也出现了很多问题,没办法电脑配置太低。。。。暂时也还不会使用,后面能装上的话再来编辑算了。

    总结

    这次作业花了很长的时间,但是对我来说收效甚微,我这低配的电脑装不上VS,百度了很多办法也无法解决问题,本来也不怎么会用java,无奈之下只能选择IDEA,由于以前完全没有使用过IDEA,所以算是从头开始,研究软件的使用就花了很长的时间,我并不适合这个专业,对于理科完全学不懂,因此也完全没有兴趣进行这个专业的学习,当初这个专业是随便选的,也不了解这个专业,只能尽力的完成作业,在网上查了很多乱七八糟的资料,算法也学不懂,本来就是一个理科渣,还好死不死的进了这全是数学的专业,只能勉强理解一些简单的原理。对于这次作业,在规定的时间里我并没有能完整完成,只能后期再尽量去补好了。

    作业自评

    这次作业虽然不想但的确水平很低很敷衍。

  • 相关阅读:
    使用json序列化类型为“ajax学习.DataSetComment+T_CommentDataTable”的对象时检测到循环引用。
    CKEditor在asp.net上使用的图例详解
    去掉 win7 “测试模式 windows7 内部版本7601” 字样
    Java中非静态方法是否共用同一块内存?
    最长公共子串(LCS)
    [链表]复杂链表的复制
    最长公共子序列
    最大子序列和问题
    [ 队列]从上往下遍历二元树
    [链表]在O(1)时间删除链表结点
  • 原文地址:https://www.cnblogs.com/wufang/p/12594291.html
Copyright © 2020-2023  润新知