zoukankan      html  css  js  c++  java
  • 2020软件工程作业03

    2020软件工程作业03

    这个作业属于哪个课程https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494
    这个作业的目标 编写程序
    作业正文  
    其他参考文献 百度

    1.GitHub项目地址

    2.PSP表格

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

    3.需求

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

    4.解题思路:

    到网上搜了很久,也请教了同学。但是自己基础不好,还是没搞懂。很多地方不会。哎。代码写在这里了。

    #include<iostream>

    using namespace std;

    int a[9][9];

    int t1,t2;

    //赋初值

    void add(int a[9][9])

    {

    for(int i=0;i<9;i++)

    {cout<<"输入第"<<i+1<<"行数据";

    for(int j=0;j<9;j++)

    {

    cin>>a[i][j];

    }

    }

    }

    void print(int a[9][9])

    {

    cout<<"========================"<<endl;

    for(int i=0;i<9;i++)

    {

    for(int j=0;j<9;j++)

    {

    cout<<a[i][j]<<" ";

    if((j+1)%3==0)

    cout<<"||";

    }

    cout<<endl;

    if((i+1) %3==0)

    cout<<"========================"<<endl;

    }

    }

    void check(int a[9][9])

    {

    int at=20;//让程序自己找几遍

    while(at--)

    {

    int p1,p2,p3,p4,p5,p6,p7,p8,p9;

    for(int i=0;i<9;i++)

    for(int j=0;j<9;j++)

    {

    if(a[i][j]==0)

    { int k=0;

                p1=p2=p3=p4=p5=p6=p7=p8=p9=1;

    //遍历九宫格

    int i1=(i/3)*3;

    int j1=(j/3)*3;

    for(int m=i1;m<i1+3;m++)

    {

    for(int n=j1;n<j1+3;n++)

    {

    if(a[m][n]==1&&p1--)

    {k++;}

    if(a[m][n]==2&&p2--)

    {k++;}

    if(a[m][n]==3&&p3--)

    {k++;}

    if(a[m][n]==4&&p4--)

    {k++;}

    if(a[m][n]==5&&p5--)

    {k++;}

    if(a[m][n]==6&&p6--)

    {k++;}

    if(a[m][n]==7&&p7--)

    {k++;}

    if(a[m][n]==8&&p8--)

    {k++;}

    if(a[m][n]==9&&p9--)

    {k++;}

    }

    }

    //九宫格遍历完,行遍历开始

    for(int jj=0;jj<9;jj++)

    {

    if(a[i][jj]==1&&p1)

    {k++;p1--;}

    if(a[i][jj]==2&&p2)

    {k++;p2--;}

    if(a[i][jj]==3&&p3)

    {k++;p3--;}

    if(a[i][jj]==4&&p4)

    {k++;p4--;}

    if(a[i][jj]==5&&p5)

    {k++;p5--;}

    if(a[i][jj]==6&&p6)

    {k++;p6--;}

    if(a[i][jj]==7&&p7)

    {k++;p7--;}

    if(a[i][jj]==8&&p8)

    {k++;p8--;}

    if(a[i][jj]==9&&p9)

    {k++;p9--;}

    }

    //行结束,列开始遍历

    for(int ii=0;ii<9;ii++)

    {

    if(a[ii][j]==1&&p1--)

    {k++;}

    if(a[ii][j]==2&&p2--)

    {k++;}

    if(a[ii][j]==3&&p3--)

    {k++;}

    if(a[ii][j]==4&&p4--)

    {k++;}

    if(a[ii][j]==5&&p5--)

    {k++;}

    if(a[ii][j]==6&&p6--)

    {k++;}

    if(a[ii][j]==7&&p7--)

    {k++;}

    if(a[ii][j]==8&&p8--)

    {k++;}

    if(a[ii][j]==9&&p9--)

    {k++;}

    }

    //列遍历完毕,k是否为8,是填数 否下一个

    //k为8 说明该空唯一因为 9-1=8

    if(k==8)

    //找p几不是0,那么该空就是p几对应的数

    {

    if(p1==1)

    a[i][j]=1;

    else if(p2==1)

    a[i][j]=2;

    else if(p3==1)

    a[i][j]=3;

    else if(p4==1)

    a[i][j]=4;

    else if(p5==1)

    a[i][j]=5;

    else if(p6==1)

    a[i][j]=6;

    else if(p7==1)

    a[i][j]=7;

    else if(p8==1)

    a[i][j]=8;

    else if(p9==1)

    a[i][j]=9;

    }//填数完成

    }//if结束

    }//大循环结束

    }//while结束

    }//check 结束

    //另一种数独简单方法,怎么说呢 在该数所在九宫格内 有一个数唯一的话就填

    void check_two(int a[9][9])

    {

    int coun=0;

    for(int r=0;r<3;r++)

    {

    for(int t=0;t<3;t++)

    {

    //填唯一的数

    for(int v1=1;v1<=9;v1++)

    {

    int count1=0;

    for(int v2=r*3;v2<r*3+3;v2++)

    {

    for(int v3=t*3;v3<t*3+3;v3++)

    {  int count=0;

    if(a[v2][v3]==0)

    {

    a[v2][v3]=v1;

    for(int m1=r*3;m1<r*3+3;m1++)

    for(int m2=t*3;m2<t*3+3;m2++)

    if(a[m1][m2]==v1)

    count++;

    //列判断

    for(int n1=0;n1<9;n1++)

    if(a[n1][v3]==v1)

    count++;

    //行判断

    for(int n2=0;n2<9;n2++)

    if(a[v2][n2]==v1)

    count++;

    //判断count==3  行 列 九宫格 +1

    if(count==3)

    {

    count1++;

    t1=v2,t2=v3;

    a[v2][v3]=0;            // 反正t1 t2 已经记下了v2 v3 而且只有一次才会正确,如果两次为0 也就是说已经不可能了

    }

    else                   //count连3都不等于 那么一定不是v1这个数 。。。置零

    a[v2][v3]=0;

    }//if a[v2][v3]==0

    }//3 for

    }//2 for

    if(count1==1&&a[t1][t2]==0)

    {a[t1][t2]=v1;

    }

    }//1 for

    coun=0;

    }//2 for

    }//1 for

    }

    //用来数 9x9 格子有几个不是0的

    int fi(int a[9][9])

    {

    int e=0;

    for(int i=0;i<9;i++)

    for(int j=0;j<9;j++)

    if(a[i][j]!=0)

    e++;

    return e;

    }

    void caishu(int a[9][9])//顾名思义 猜数 ,假设该格子为一个数 ,在调用上面方法

    {

    int a_cope[9][9];

    for(int i=0;i<9;i++)

    for(int j=0;j<9;j++)

    a_cope[i][j]=a[i][j];

     for(int m=0;m<9;m++)

     for(int n=0;n<9;n++)

     if(a_cope[m][n]==0)      

    for(int v=1;v<=9;v++)

         {

     a_cope[m][n]=v;   

     check(a_cope);     //这两个可以多来几遍

     check_two(a_cope); //这两个可以多来几遍 以保证数可以填完

     check(a_cope);

     check_two(a_cope);

     check(a_cope);

     check_two(a_cope);

     check(a_cope);

     check_two(a_cope);

    if(fi(a_cope)==81)

    { for(int f=0;f<9;f++)

     for(int g=0;g<9;g++)  

     a[f][g]=a_cope[f][g];

      break;

     }

    else

    {

    for(int i=0;i<9;i++)

    for(int j=0;j<9;j++)

    a_cope[i][j]=a[i][j];

    }

     }

    }

    int main()

    {

    cout<<"依次输入数独内容:"<<endl;

    add(a);

    check(a);

    check_two(a);

    check(a);

    check_two(a);

    check(a);

    print(a);

    if(fi(a)==81)

    {cout<<"所得结果如下:"<<endl;

    print(a);

    }

    else

    { caishu(a);

    print(a);

    }

    system("pause");

    return 0;

    }

  • 相关阅读:
    程序员的7中武器
    需要强化的知识
    微软中国联合小i推出MSN群Beta 不需任何插件
    XML Notepad 2006 v2.0
    Sandcastle August 2006 Community Technology Preview
    [推荐] TechNet 广播 SQL Server 2000完结篇
    《太空帝国 4》(Space Empires IV)以及 xxMod 英文版 中文版 TDM Mod 英文版 中文版
    IronPython 1.0 RC2 更新 1.0.60816
    Microsoft .NET Framework 3.0 RC1
    《Oracle Developer Suite 10g》(Oracle Developer Suite 10g)V10.1.2.0.2
  • 原文地址:https://www.cnblogs.com/1253www/p/12594234.html
Copyright © 2011-2022 走看看