2020软件工程作业03

 这个作业属于哪个课程

 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1

 这个作业要求在哪里

 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494

 这个作业的目标

 独立编程完成数独

 作业正文

 如下所示

 其他参考文献

 CSDN以及百度

PSP表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

       40

Estimate

估计这个任务需要多少时间

720

      1860

Development

开发

240

       420

Analysis

需求分析 (包括学习新技术)

180

180

Design Spec

生成设计文档

30

60

Design Review

设计复审

30

60

Coding Standard

代码规范 (为目前的开发制定合适的规范)

60

60

Design

具体设计

60

90

Coding

具体编码

180

600

Code Review

代码复审

30

60

Test

测试(自我测试,修改代码,提交修改)

30

60

Reporting

报告

60

120

Test Repor

测试报告

30

30

Size Measurement

计算工作量

30

60

Postmortem & Process Improvement Plan

事后总结, 并提出过程改进计划

60

60

合计

1020

2100

   打开博客园刚看到这个题目我就蒙了。。。光是看到一大堆的素材我就不太想看下去。一瞬间丝入死灰,超出我的范围。在我查看了无数的网络资料,看了无数大佬的代码后,我发现我并没有看懂什么,他们写的数独游戏大部分都是写的九宫格,对于我来说难度有点大,所以,作为学渣的我留下了悔恨的眼泪,后悔大一大二都去打了水漂。重整旗鼓我就打算研究最简单的三宫格(我只能看看最简单是不是能看懂)

一些结题思路(好像只适用于三宫格)

 

流程图

 

关键代码

行遍历与列遍历void input()

{
  FILE* fp1;
  fp1 = fopen("input.txt", "r");
  for (int i = 0; i < 3; i++)                      //读取数据
  {
    for (int j = 0; j < 3; j++)
    {
        fscanf(fp1, "%d", &a[i][j]);
        if (a[i][j] != 0)                    //遇到已知数字,放入b数组 ?
       {
         row[t] = i;
         line[t] = j;
         b[t] = a[i][j];
         t++;
     }
   }
  }
}

void output()
{
   FILE* fp2;
   fp2 = fopen("output.txt", "w");
   for (int i = 0; i < 3; i++)
   {
      for (int j = 0; j < 3; j++)
      {
 
        fprintf(fp2, "%d ", a[i][j]);
      }
      fprintf(fp2, " ");
   }
}

代码分析

行遍历与列遍历

void hang()
{
   int y = 6;
   for (int i = 0; i < 3; i++)              //从第一行开始遍 ?
   {
      int temp = 0;
      for (int j = 0; j < 3; j++)
      {
      if (a[i][j] != 0)
      temp++;
      }
      if (temp == 2)                         //如果遇到已知两个值的,就把剩下那个空填上
        {
          for (int k = 0; k < 3; k++)        //找出未知数,方法和search一 ?
          {
            if (a[i][k] != 0)
            {
               y = y - a[i][k];
            }
         }
         for (int f = 0; f < 3; f++)       //把空缺填 ?
         {
            if (a[i][f] == 0)
            {
               a[i][f] = y;
            } 
          }
          y = 6;
       }
      else
      continue;
     }
}
 
 
void lie()
{
   int y = 6;
   for (int i = 0; i < 3; i++)              //从第一列开始遍 ?
   {
      int temp = 0;
      for (int j = 0; j < 3; j++)
       {
        if (a[j][i] != 0)
        temp++;
       }
      if (temp == 2)                         //如果遇到已知两个值的,就把剩下那个空填上
      {
         for (int k = 0; k < 3; k++)
         {
            if (a[k][i] != 0)
            {
               y = y - a[k][i];
            }
         }
         for (int f = 0; f < 3; f++)
           {
            if (a[f][i] == 0)
            a[f][i] = y;
           }
        }
        y = 6;
   }
}

代码调试

由于在VS之前就已经执行过了,其实没有什么错误

 

 八

总结

只有一句话:我太太太难了。当然,和大佬比起来我啥也不是。从一开始的完全不知道怎么下手,到开始有了一点思路,主要是站在前人的肩膀上,有了大佬提供的思路,才能 有一些想法。完全觉得自己没有啥动手能力,我枯了。感觉对于编程我会的都是一些书面知识。后续的其他宫格我也会继续研究,希望自己有看懂的一天。hhhh

github地址:https://github.com/Helitrope-daisy/20177670

原文地址:https://www.cnblogs.com/helitrope/p/12593701.html