前言

之所以想到要写这个程序,起源于孩子学校的一个竞赛活动,就是九宫格数独。我本想网上下载几个题目做做练习一下,毕竟孩子才一年级啦。结果网上搜出来的都不能直接下载,

这当然难不倒我这大咖了,哈哈....果断截图打印,搞定。后来感觉总是差了点儿什么,毕竟委屈求全的事儿我还是很不爽的,那好吧,我自己写一个......造福全人类。

程序代码

闲话少续,上干货(代码):

1.    界面设计

简单来讲还是用C#吧,界面设计起来简单些。看下功能还是挺全的吧?

2. 核心算法

我定义了一个9*9的二维数组,用来保存计算出来的全体数据。

private int[,] arrayList = new int[9,9];

大体思路就是:初始化一个二维数据备用,然后按照每个宫进行计算,每个格子的数都是随机生成的,规则就是横竖以及各个宫都包含1-9这9个数且不能重复。

需要注意的是,这样随机算是有很大概率到最后是无法找到合适的数填满整个九宫格的,那就需要重新开始计算新的一组数据。

为了保证符合规则,我设计了一个checklist,列表中存的都是不能出现的数字,比如一行中前面有了3,5,7,那就把这几个数放到checklist中,然后计算这一行后面

的数的时候就不能出现这几个了。

初始化九宫格函数:

void InitArray(){try{bool cancleFlag = false;bool breakFlag = false;while (!cancleFlag){breakFlag = false;for (int ii = 0; ii < 9; ii++){for (int jj = 0; jj < 9; jj++){arrayList[ii, jj] = 0;}}//for (int gongCount = 1; gongCount <= 9; gongCount++){if (breakFlag){break;}//添加本宫已选的数int startRow = 0;int startCol = 0;if (gongCount <= 3){startRow = 1;startCol = (gongCount - 1) * 3 + 1;}else if (gongCount > 3 && gongCount <= 6){startRow = 4;startCol = (gongCount - 3 - 1) * 3 + 1;}else{startRow = 7;startCol = (gongCount - 6 - 1) * 3 + 1;}int randomNum = 0;for (int rowIdx = startRow; rowIdx < startRow + 3; rowIdx++){if (breakFlag){break;}for (int colIdx = startCol; colIdx < startCol + 3; colIdx++){//initTempArray();initCheckList(rowIdx, colIdx, gongCount);randomNum = GetRandomNum(checkList);if (randomNum == 0){//ArrayToString();breakFlag = true;break;}else if (randomNum > 0 && rowIdx == 9 && colIdx == 9){cancleFlag = true;}arrayList[rowIdx - 1, colIdx - 1] = randomNum;//checkList.Add(arrayList[0, 0]);}}ArrayToString();}}//System.Console.WriteLine("good.");Logger.LogWriter("\n" + "答案");}catch (Exception ex){Logger.LogWriter(ex);}}

计算随机数函数:

         /// <summary>/// 取得1-9之间的随机数,且不包含在checklist中/// </summary>/// <param name="checkList"></param>/// <returns></returns>int GetRandomNum(ArrayList checkList){int random = 0;bool flag = true;while(flag){Random r = new Random();random = r.Next(1,10);if (!checkList.Contains(random)){flag=false;}//如果包含9个数字则算错了,需要重新计算if (checkList.Contains(1)&& checkList.Contains(2) && checkList.Contains(3) && checkList.Contains(4) && checkList.Contains(5) && checkList.Contains(6) && checkList.Contains(7) && checkList.Contains(8) && checkList.Contains(9)){random = 0;flag = false;//System.Console.Write("not good.\n");Logger.LogWriter("\n重新计算.....");}}return random;}

运行结果:

我将结果输出到了CSV文件(此处代码没有贴,这不是重点),这样就可以直接打印了~~再也不用到处找题目了(我家娃娃说:我太难了~~)

未完待续....

后来我完善了题目难度选择,题目数量设置,保存文件路径等功能,这样就可以自行设置题目难度,数量以及设置保存路径了。

待完善:1. 没有做异步处理,开始计算界面会假死,体验不好。

2. CSV文件没有格式设置,打开后需自行设置一下单元格边框及列宽和行高(建议列宽6,行高33)

好了,以后再也不用看别人眼色了~~

重要:程序下载地址:https://download.csdn.net/download/happyxjbf/16689751(已更新)

更新:2021-4-23 1. 更新了界面异步处理,现在不会假死了~~

2. 可以显示实时进度了,计算到了第几题

简码笔记,让你的代码更加简约精炼。

转载请注明出处。

九宫格数独模型设计(随机生成题目)相关推荐

  1. C语言生成一个随机的九行九列数独,一个随机生成数独的C++程序

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. //mySIZE是数独棋盘的边长,棋盘是mySIZE*mySIZE的大小 int mySI ...

  2. n*n/九宫格数独解法及随机生成java实现,独家

    该算法可解出任意无错误情况下的9宫格数独:理论上也能解决其他阶的同类型规则的数独.如22,33,44,55此类的.只不过耗时长短的问题. 目前代码跑出来的结果跑了22.33.4*4的解题和随机生成. ...

  3. java实现加减乘除运算符随机生成十道题并判断对错_简单小程序——产生三十道小学四则运算题目...

    题目要求程序可以生成三十道小学四则运算题目. 因为要随机生成题目,则需要产生随机数,因此我上网搜索了生成随机数的方法,选择了使用Random类得到规定范围内的随机数.因为一个运算需要三个元素,两个参与 ...

  4. Python—— 随机生成测试试卷

    假设语文老师给学生最近学习的古诗进行一次小测验,但是为了防止作弊,每个人的试卷出题顺序各不相同. 程序: 创建20份不同的试卷 每份数据创建10个选择题,次序随机. 每个问题有四个选项,其中只有一个正 ...

  5. (附代码)数独大作业【读取数独,解数独,生成唯一解数独(随机,特定形状,不同难度生成),玩数独】

    注:未经同意不要转载. 上学期简单的做了一个数独程序,实现了一些功能,想简单的为大家提供的思路. 为了避免某些情况出现,具体代码暂时先不发了,有不太懂的地方可以评论提问啊. 下面是我的具体报告: 一, ...

  6. c++ 随机生成数独(不保证唯一解)

    给出一个最简单的生成数独初盘的程序,不保证有唯一解,终盘的正确性通过填充的过程来确定,可以用舞蹈链算法求解该数独得到其中一个解 随机生成的方法就算交换行和列然后随机挖洞 这里有一点要注意的就是交换的行 ...

  7. OpenCV玩九宫格数独(三):九宫格生成与数独求解

    前言 在此之前,OpenCV玩九宫格数独(一)和(二)分别介绍了如何从九宫格图片中提取出已知数字和如何用knn训练数字识别模型.在这些前期工作都已经完成的基础上,接下来我们需要做什么呢? 我们要做的有 ...

  8. python:随机生成加法题目,输入答案进行判断【进阶:加减乘除】

    任务要求: 1.随机生成10以内加法题目 2.学生查看题目并输入答案 3.判断学生答案是否正确 4.退出时,统计答题总数,并统计正确数量和正确率(保留两位小数) 实现代码: 加法运算: t = 0 # ...

  9. java面试题:编写java程序,随机生成n个m以内的加减法算式,形如a±b=c,其中n,m∈N+,a,b,c∈[0,m].请结合自身请款勾选作答的题目,然后在下面写出代(伪)码.

    public class AddTest { public static void main(String[] args) { /** * 生成次数为正整数,根据生成次数,随机生成随机册数次的加减运算 ...

  10. 随机生成100个卡号题目

    随机生成100个卡号 1).卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100), 2). 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat& ...

最新文章

  1. vue实现移动端圆形旋钮插件
  2. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
  3. 要学DOT NET了
  4. VMware Workstation安装虚拟机失败
  5. python反向切片_Python-关于反向切片的小问题
  6. TensorFlow2.0:高阶操作
  7. 数学 - 线性代数导论 - #9 Ax=b的解:存在性、解法、解的结构、解的数量
  8. Kotlin的一些特殊运算符
  9. Win7下使用VC6.0的注意事项
  10. 2019各行业【知识地图】集锦
  11. uview ui与element ui的区别和用法
  12. Three.js鼠标点击平面实现任意画线功能
  13. 市场规模一年猛增24% 这个靠“打印”出来的市场正在韩国崛起
  14. 对象转SortedMap,字段按照首字母排序
  15. catkin build 工作空间锁定 —— [build] Error: Unable to find source space `/home/xxx/src`
  16. 互动直播之WebRTC服务器Kurento实战
  17. 学习ARM开发(10)
  18. 使用sklearn划分训练集、验证集、测试集
  19. 2021-06-07 RK3328 Android 10 上调试es7243记录
  20. 《三国塔防》为什么成功?

热门文章

  1. 工程物料管理信息化建设(一)——什么是工程物料管理系统
  2. 机器学习深度学习视频资料大汇总
  3. 李宏毅2020机器学习资料汇总
  4. ViewStub延迟加载
  5. json学习笔记,json与js对象格式的转换,js对象转json字符串,json格式转js对象
  6. Hamcrest包含匹配器
  7. 企业级PHP后台开发框架
  8. Hadoop集群的搭建(结束)——修改hadoop配置文件以及启动集群服务
  9. 计算机网络知识点汇总(谢希仁 第七版)
  10. 懂一些数据分析工具,为啥还要考CPDA数据分析师证书?