【教学类-43-16】 20240106 推算5-9宫格数独可能出现的不重复题量(N宫格数独模板数量的推算)

本文主要是介绍【教学类-43-16】 20240106 推算5-9宫格数独可能出现的不重复题量(N宫格数独模板数量的推算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作品展示:

通过对各种已有结果的人工推算,目前得到两个结论

一、阶乘==基本样式的数量【【123】【321】【231】【132】【312】【312】】6组

结论:阶乘等于出现的基本样式数量

以下N*N格会出现的最大排序数量(比如包含333222111这种不符合数独规律的元素)


'''
目的:测试N宫格可以生成多少组基本样式(乘阶)[1,2,3,4,5][5,4,3,2,1]}
作者:阿夏
时间:2024年1月6日19:00
'''import random
import math
from itertools import permutations# 宫格数gg=[1,2,3,4,5,6,7,8,9]
# gg=[5]
ggg=[]
for hs in gg:n=[]for nu in range(1,hs+1):n.append(nu)# lst = ''.join(str(num) for num in n)# print(n)print('{} 宫格基本数字 "{} "'.format(hs,n))# 3宫格,基础数字是'123'# 123中间随机抽取3个,不同的3个数字排序方法permutations_list = list(permutations(n))numbers = [list(permutation) for permutation in permutations_list]# numbers = ''.join(str(num) for num in number)# print(numbers)print('{} 宫格可以组成基本样式(阶乘)" {} "组'.format(hs,len(numbers)))# [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]# 6种组合# math生成可能的数量combinations = math.comb(len(numbers), hs)print("math法{} 宫格可以生成 {} 组不同的列表".format(hs ,combinations))# 在原有基础上乘上基本样式组的数量,如宫格基本样式是6组【123】【132】【213】【231】【312】【321】,通过互相交叉选取3个为一组,会有20种可能# 最后需要20*6=120,才是最大的生成数量。因此math计算后,还要乘以基本样式数量print("实际法{} 宫格可以生成{} 组不同的列表".format(hs ,combinations*len(numbers)))print('---------------')# 1 宫格基本数字 "[1] "
# 1 宫格可以组成基本样式(阶乘)" 1 "组       
# math法1 宫格可以生成 1 组不同的列表
# 实际法1 宫格可以生成1 组不同的列表
# ---------------
# 2 宫格基本数字 "[1, 2] "
# 2 宫格可以组成基本样式(阶乘)" 2 "组       
# math法2 宫格可以生成 1 组不同的列表
# 实际法2 宫格可以生成2 组不同的列表
# ---------------
# 3 宫格基本数字 "[1, 2, 3] "
# 3 宫格可以组成基本样式(阶乘)" 6 "组       
# math法3 宫格可以生成 20 组不同的列表        
# 实际法3 宫格可以生成120 组不同的列表        
# ---------------
# 4 宫格基本数字 "[1, 2, 3, 4] "
# 4 宫格可以组成基本样式(阶乘)" 24 "组      
# math法4 宫格可以生成 10626 组不同的列表     
# 实际法4 宫格可以生成255024 组不同的列表     
# ---------------
# 5 宫格基本数字 "[1, 2, 3, 4, 5] "
# 5 宫格可以组成基本样式(阶乘)" 120 "组     
# math法5 宫格可以生成 190578024 组不同的列表 
# 实际法5 宫格可以生成22869362880 组不同的列表
# ---------------
# 6 宫格基本数字 "[1, 2, 3, 4, 5, 6] "        
# 6 宫格可以组成基本样式(阶乘)" 720 "组     
# math法6 宫格可以生成 189492294437160 组不同的列表
# 实际法6 宫格可以生成136434451994755200 组不同的列表
# ---------------
# 7 宫格基本数字 "[1, 2, 3, 4, 5, 6, 7] "
# 7 宫格可以组成基本样式(阶乘)" 5040 "组
# math法7 宫格可以生成 16321981448897949868560 组不同的列表
# 实际法7 宫格可以生成82262786502445667337542400 组不同的列表
# ---------------
# 8 宫格基本数字 "[1, 2, 3, 4, 5, 6, 7, 8] "
# 8 宫格可以组成基本样式(阶乘)" 40320 "组
# math法8 宫格可以生成 173117930575796585984663510371920 组不同的列表
# 实际法8 宫格可以生成6980114960816118346901632738195814400 组不同的列表
# ---------------
# 9 宫格基本数字 "[1, 2, 3, 4, 5, 6, 7, 8, 9] "
# 9 宫格可以组成基本样式(阶乘)" 362880 "组
# math法9 宫格可以生成 300649979042426162195454856425990347600496000 组不同的列表
# 实际法9 宫格可以生成109099864394915605737486658299863377337267988480000 组不同的列表
# ---------------

二、用“阶乘结果”倒推,预测5-9宫格数独的不重复最大样式数量

我发现4宫格限制条件后,实际出现576套不重复模板,比阶乘测试的不重复模板288,正好是2倍。288*2=576,而这个2倍恰好是“3宫格中,不重复模板12条和阶乘6的除法结果。(前一条的除差)

用这个思路推算了1-4宫格,发现1宫格无法找前面一条的除法结果,但2宫格、3宫格、4宫格,都是符合这个规律。

------------------------------------------------------------------------------------------------------------

手动推算了5宫格的不重复模板数量

5宫格的阶乘推算不重复模板数量*(4宫格的阶乘模板数/4宫格的阶乘数)=预估数量

                 34460                         *              (288   /    24)                       =414720

代码推算5-9宫格数独题符合标准的不重复题目数量


'''
目的:测试N宫格可以生成多少不重复的数独题,从576=288*12/2推测
作者:阿夏
时间:2024年1月6日19:00
'''import random
import math
from itertools import permutations# 宫格数P=[]
Q=[]
R=[]hsall=[]
for i in range(1,10):    # 1-9宫格hsall.append(i)# 计算1-9各自的乘阶  jc=[]for hs in hsall:    j = math.factorial(hs)print('{}的阶乘是{}'.format(hs,j))jc.append(j)
print(jc)
# [1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
print(len(jc))
# jc bs=[]
ds=[]result = []
product = 1
for num in range(len(jc)):product *= jc[num]c=int(product/jc[num])    # 除法结果,倍数# print(c)print('---{}  宫格  乘阶数{}  生成   {}  条不重复模板,除法结果是 {}-----'.format(hsall[num],jc[num],product,c))# 除法的结果(倍数)做成列表bs.append(c)# 阶乘推算的不重复模板数量ds.append(product)
print(bs)
# [1, 1, 2, 12, 288, 34560, 24883200, 125411328000, 5056584744960000]
print(ds)
# [1, 2, 12, 288, 34560, 24883200, 125411328000, 5056584744960000, 1834933472251084800000]# 因为1宫格无法找到0宫格的生成数量,所以bs前面再加1
bs.insert(0,1)
print(bs)
# [1, 1, 1, 2, 12, 288, 34560, 24883200, 125411328000, 5056584744960000]# 推算结果
for o in range(len(ds)):print('阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估){} 宫格数独不重复模板数量 {} '.format(o+1,int(ds[o])*int(bs[o])))# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)1 宫格数独不重复模板数量 1
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)2 宫格数独不重复模板数量 2
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)3 宫格数独不重复模板数量 12
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)4 宫格数独不重复模板数量 576
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)5 宫格数独不重复模板数量 414720
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)6 宫格数独不重复模板数量 7166361600
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)7 宫格数独不重复模板数量 4334215495680000
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)8 宫格数独不重复模板数量 125824009525788672000000
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)9 宫格数独不重复模板数量 230121443546659694208614400000000

说明:

由于现在还无法用代码生成5宫格数独不重复题目,并排除重复(数据千亿次,电脑无法计算 MemoryError),获得正确的结果。

所以以上只是我根据已有的一些数字(3宫格数独12套、4宫格数独576套),按照一定规律推算出来的。不保证正确性。

最后把所有参数都写在一起print


'''
目的:测试N宫格可以生成多少不重复的数独题,从576=288*12/2推测
作者:阿夏
时间:2024年1月6日19:00
'''import random
import math
from itertools import permutations# 宫格数P=[]
Q=[]
R=[]hsall=[]
for i in range(1,10):    # 1-9宫格hsall.append(i)# 计算1-9各自的乘阶  jc=[]for hs in hsall:    j = math.factorial(hs)print('{}的阶乘是{}'.format(hs,j))jc.append(j)
print(jc)
# [1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
print(len(jc))
# jc bs=[]
ds=[]
jcs=[]
jcmb=[]result = []
product = 1
for num in range(len(jc)):product *= jc[num]c=int(product/jc[num])    # 除法结果,倍数# print(c)print('---{}  宫格  乘阶数{}  生成   {}  条不重复模板,除法结果是 {}-----'.format(hsall[num],jc[num],product,c))jcs.append(jc[num])jcmb.append(product)# 除法的结果(倍数)做成列表bs.append(c)# 阶乘推算的不重复模板数量ds.append(product)
print(bs)
print(jcs)
# [1, 1, 2, 12, 288, 34560, 24883200, 125411328000, 5056584744960000]
print(ds)
# [1, 2, 12, 288, 34560, 24883200, 125411328000, 5056584744960000, 1834933472251084800000]# 因为1宫格无法找到0宫格的生成数量,所以bs前面再加1
bs.insert(0,1)
print(bs)
# [1, 1, 1, 2, 12, 288, 34560, 24883200, 125411328000, 5056584744960000]print('阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)')
print('-----------------------------------')
# 推算结果
for o in range(len(ds)):print('{} 宫格数独不重复模板数量 {} 阶乘 {} 组合模板 {}  '.format(o+1, int(ds[o])*int(bs[o]),jcs[o],jcmb[o]))print('-----------------------')# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)1 宫格数独不重复模板数量 1
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)2 宫格数独不重复模板数量 2
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)3 宫格数独不重复模板数量 12
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)4 宫格数独不重复模板数量 576
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)5 宫格数独不重复模板数量 414720
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)6 宫格数独不重复模板数量 7166361600
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)7 宫格数独不重复模板数量 4334215495680000
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)8 宫格数独不重复模板数量 125824009525788672000000
# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)9 宫格数独不重复模板数量 230121443546659694208614400000000# 阶乘推算不重复数量乘以“前宫格除法结果” 最大不重复数量(预估)
# -----------------------------------
# 1 宫格数独不重复模板数量 1 阶乘 1 组合模板 1
# -----------------------
# 2 宫格数独不重复模板数量 2 阶乘 2 组合模板 2
# -----------------------
# 3 宫格数独不重复模板数量 12 阶乘 6 组合模板 12
# -----------------------
# 4 宫格数独不重复模板数量 576 阶乘 24 组合模板 288
# -----------------------
# 5 宫格数独不重复模板数量 414720 阶乘 120 组合模板 34560
# -----------------------
# 6 宫格数独不重复模板数量 7166361600 阶乘 720 组合模板 24883200
# -----------------------
# 7 宫格数独不重复模板数量 4334215495680000 阶乘 5040 组合模板 125411328000
# -----------------------
# 8 宫格数独不重复模板数量 125824009525788672000000 阶乘 40320 组合模板 5056584744960000
# -----------------------
# 9 宫格数独不重复模板数量 230121443546659694208614400000000 阶乘 362880 组合模板 1834933472251084800000
-----------------------

作为学美术专业的老师,我只有初中数学水平,o(╥﹏╥)o,

很希望有专业的编程员能提供经过验证的5宫格数独不重复模板题目数量 Thanks♪(・ω・)ノ

这篇关于【教学类-43-16】 20240106 推算5-9宫格数独可能出现的不重复题量(N宫格数独模板数量的推算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577827

相关文章

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

poj2406(连续重复子串)

题意:判断串s是不是str^n,求str的最大长度。 解题思路:kmp可解,后缀数组的倍增算法超时。next[i]表示在第i位匹配失败后,自动跳转到next[i],所以1到next[n]这个串 等于 n-next[n]+1到n这个串。 代码如下; #include<iostream>#include<algorithm>#include<stdio.h>#include<math.

poj3261(可重复k次的最长子串)

题意:可重复k次的最长子串 解题思路:求所有区间[x,x+k-1]中的最小值的最大值。求sa时间复杂度Nlog(N),求最值时间复杂度N*N,但实际复杂度很低。题目数据也比较水,不然估计过不了。 代码入下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

最大流、 最小费用最大流终极版模板

最大流  const int inf = 1000000000 ;const int maxn = 20000 , maxm = 500000 ;struct Edge{int v , f ,next ;Edge(){}Edge(int _v , int _f , int _next):v(_v) ,f(_f),next(_next){}};int sourse , mee