一秒出一套数独题?Excel六步就搞定

2021-01-06 22:46:49 90点赞 229收藏 8评论

创作立场声明:本文系作者实践总结,欢迎交流。

背景

突然迷上了数独。不是喜欢求解,而是喜欢出题——一套题能让孩子做好半天。用Excel一秒出一套,这事半功倍的带娃技能要不要?

过程

数独的规则就是每行每列每个宫都由不重复的1~9组成。网上不少编程算法还有源码,但编程对于大多数网友来说还是有些门槛的。经过一翻搜索,我找到了一个另类的算法(链接在此,感谢原作者)!我们看看用Excel怎么实现他。注:步骤1~5全在Sheet2中,步骤6才回到Sheet1。

1. 预置

在Sheet2中预置一个完整的数独,百度搜一套就行。

一秒出一套数独题?Excel六步就搞定

2. 生成辅助列A

用rand()生成9个随机数(列A)。

  1. A12输入公式:=RAND()

  2. 拖拽至A20

一秒出一套数独题?Excel六步就搞定

3. 生成辅助列B

再用rank()排序就能生成1~9的随机序列(列B)。

  1. B12输入公式:=RANK.EQ(A12,$A$12:$A$20)

  2. 拖拽至B20

一秒出一套数独题?Excel六步就搞定

4. 生成辅助列C

在序列B的基础上生成一个“下一个数字”的序列C。

  1. C12输入公式:=B13

  2. 拖拽至C19

  3. C20输入公式:=B12

一秒出一套数独题?Excel六步就搞定

5. 数字替换

预置数独中的每一个数n,在序列B中找到n(如B18),则序列C中相同位置的数(如C18)就是生成新数独的值。对预置数独所有数字替换一遍就可以生成一个新的数独。

  1. 在L2输入公式:=VLOOKUP(A2,$B$12:$C$20,2,0)

  2. 拖拽至L10

  3. 拖拽至T10

一秒出一套数独题?Excel六步就搞定

用格式刷刷一下,再按F9刷新,是不是有点儿样子啦?别急,在A1格输入5作为遮蔽比例的控制变量(大体精度10%,B1可以填入文字注释以免以后忘记怎么用)。经过试验,感觉显示四、五成的数效果还可以(也就是参数选择5或者6比较合适)。至此,Sheet2的工作完毕。

一秒出一套数独题?Excel六步就搞定

6. 遮蔽

最后一步,将新数独的部分数字遮蔽就大功告成了。下列操作切换回Sheet1。

  1. 在A1输入公式:=IF(RAND()*10>Sheet2!$A$1,Sheet2!L2,"")

  2. 拖拽至A9

  3. 拖拽至I9


一秒出一套数独题?Excel六步就搞定

调整一下边框样式,接下来就可以按F9爽啦!如果打印出来,一页可以放好几个(就像题图一样),够娃做会儿的了。

一秒出一套数独题?Excel六步就搞定

后记

本方法仅供消遣,并不能确保解的唯一性。欢迎探讨。


展开 收起
8评论

  • 精彩
  • 最新
  • 点赞,对Excel的公式了解的很透彻呀

    校验提示文案

    提交
    感谢欣赏!都是平时的一点点积累。分享出来,希望有人一切探讨。

    校验提示文案

    提交
    收起所有回复
  • 我错了 这个是结果反推 一定是有答案的 不用较准

    校验提示文案

    提交
    感谢老哥细心分析!结果肯定有,但不一定只有一个。

    校验提示文案

    提交
    收起所有回复
  • 取随机数用round配合randbetween就行了,不需要辅助列

    校验提示文案

    提交
    辅助数列是为了取得不重复的1-9。这两个函数怎样组合能实现不重复?请赐教。

    校验提示文案

    提交
    收起所有回复
  • 加一个自动校准 算不出来的直接略过

    校验提示文案

    提交
  • 我用专用的数独游戏机

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
229
扫一下,分享更方便,购买更轻松