VBA:完美解决数独问题----全网最强

 

【说在前面】:

       之前,我在微信朋友圈看到一个同事发了一个状态,说的是她在家辅导孩子做作业,一个数独的题目,好像没有做出来。我看了下,我也做不出来,后来仔细想了下,花了两个多小时时间,用Python编了个程序,把那个数独题目解出来了。随后我就发了一个公众号的推送,这个推送被我老婆看见了,说:“人工解数独两分钟,你写个程序花两个多小时?!何必呢?”我说:“这个程序可以解答任何9×9的数独问题。”她说:“如果换一个数独题目,又要重新改代码,不太方便!而且我也不懂什么编程,不会用你的程序。”我想想也是,这也是我当初准备考虑用VBA的原因,就是因为VBA依托于电子表格,出题、解答、展示结果都比较直观,程序使用起来也比较方便。后来之所以用Python来编程,是因为Python处理这种大量数据计算比较方便快捷。

       当初用Python编写程序,利用到了面向对象的编程方法,如果你不了解面向对象编程,可能对我之前写的程序理解起来有难度。所以我想着用VBA编程,采用面向过程的方式编写一个程序来解答数独问题。

       这几个周末的闲暇时间,我一直在考虑用VBA来写一个解数独问题的程序,采用面向过程的方式来编写,这样便于理解。如果面向过程都搞定了,将来在转换到面向对象,就很容易了。我在网上查阅了很多资料,也看了很多网友写的程序,都测试了一下,基本上都满足不了我的需求。不是解题太慢,就是解不出来,解答一些骨灰级难度的数独,还导致死机,系统电脑直接卡死、崩溃。有的还需要使用“猜测法”来解数独,感觉超级不爽。

       好吧!既然动了用VBA解数独的心思,那就必须得搞定。于是,想了几天,反复测试,编写代码,终于搞定了。一般数独可以秒解。

       我在网上查了很多资料和其他网友写的程序,都没有我这个厉害,找一个骨灰级难度的数独,解出来也就两分多钟。网上一些朋友提供的数独程序,骨灰级别难度的数独,根本解决不了。

       以上就是一个骨灰级别难度的数独,用的程序解出来了。尝试了661773次,耗时207.829秒。是不是很牛X。我在网上还没有发现有谁用VBA写出过能这么快解数独的程序。

看视频演示,全网最强VBA解答数独问题!

注意:全网最强!强!!强!!!

不服来战~!

VBA:完美解决数独问题-视频演示

视频连接地址:https://www.bilibili.com/video/BV1PZ4y1G7Zv/

       怎么样?展示视频看完,是不是觉得这个程序很强大?视频里面演示的各种难度的数独,都是我在一个在线的数独网站上找的,大家有兴趣也可以自己试试,测试一下。

       免费在线数独网址:

       http://www.cn.sudokupuzzle.org/

 

【一个小插曲】

       之前,我把这个数独程序写完了,做了展示视频,写了这个技术文档的草稿,给老婆看。她是一个程序小白,如果她都大概能看懂,有兴趣把展示视频看完,那说明这个技术文章写得还是比较详细的,因为我的题目是《详解VBA解决数独问题》,是“详解”。作为完全不懂编程的她看后,也提了很多问题和建议,大多都是很弱的问题。我想她如果有这个问题,可能大家在看的时候,也会有同样的问题,所以我就做了一些修改和进一步的讲解。也就有了下面的:

〇、主界面设计 这个章节,这是我新增加的一个,所以用 〇 来编号。然后再给老婆看了下,她基本上满意了,所以我就准备发布了。

 

       跟老婆的对话:

       她:你这下改的还不错,写的很详细,但是我不想看,太长了。

       我:那展示视频怎么样?

       她:视频配乐也不错。感觉你这个程序还是很厉害的!

       我:这都是在你的指导下,做的修改啊!

       她:你比较像白居易。

       我:什么意思啊?

       她:白居易在写诗的时候,都会先读给他老婆听,他老婆听得懂,觉得好,他才会发。所以他的诗都通俗易懂,而且又不失高端大气。

       我:白居易?不知道,我只知道白云边。

       她:·······,(直接不理我了)

------ 语法不兼容,系统已死机 ------

成功的把天聊死了 呵呵

 

 

 ----------  以上都是废话,下面进入正题 ----------

 

       很多时候,我们觉得计算机很聪明,很厉害!其实,计算机很笨,他唯一的优点就是“快”!他能很快的处理一些复杂的,需要反复处理的事情。

       所以,对于计算机来说,只有我们想不到的事情,没有他做不到的事情。如果他做不到,那就是我们还没有把问题想清楚、分析透彻,无法翻译成代码,让计算机执行。

       因此,只有了解计算机的运行原理,懂得计算机的思维方式,我们才能把现实中的问题,按计算机能够理解的思路,想清楚,分析透,并翻译成代码,让计算机帮我们做。

 

       下面就向大家介绍一下VBA解数独的思路和代码。

       刚才说了,计算机有一个很大的特点就是“快”!如何发挥它“快”的优势?那就要利用循环,快速的反复运算处理。那么怎么形成循环呢?那就找规律,要分析解决问题的核心规律,抽象成代码和变量,利用循环,快速运算处理。

       现在我们就来分析数独问题:

       什么是数独?

       数独是一种数学游戏。数独盘面是个九宫,每一宫又分为九个小格。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。所以又称“九宫格”。

 

〇、程序界面设计

       为了用户能够很好的体验这个程序,同时也为了后续的开发方便,我们需要对程序界面做一个很好的设计。

程序主界面:

 

       我是在WPS的电子表格里设计的,可以看到最左边和最上边的数字编号,这是表格的行、列编号,是绝对定位编号,我设计的数独九宫格,是在上面空了两行,左边空了一列开始绘制表格的,所以我在上面标注了 起始行号:3,起始列号:2,这就是针对我绘制的数独九宫格第一个格子的位置,相对于电子表格编号的定位,这是相对定位,便于以后调整表格位置,不用改代码,只需要修改起始行号和起始列号的数字就可以了。作答区也是这个思路设计的。

       第13行,我做了一个 显示解题过程 的开关,只需要用鼠标点击那个小黑点,就可以自由的启用和关闭 显示解题过程 了,方便操作。

       这些都是

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值