九宫锁屏图案有多少种c语言编程,手机九宫格图案解锁问题,编程高手戳进来!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
数学吧里看到的一个有趣问题,题目描述很简单:
求手机九宫格图案解锁一共有多少种答案。规则大家应该都知道,至少连四个点,最多连九个点,一条直线上的三个点只有在中间的点已被连过才能直接将两端点相连,的一种有序的排列。
下面提供一种思路
'''不妨将九个点编号1,2,3,4,5,6,7,8,9;用a,b,c,d,e,f,g,h,i表示每次取的值,用x表示解的个数,若a=3,则称3被a选择,或a取3。
下面是大致思路:
1.建立数组l=[[]*9],其中l[j-1]表示初始 情况下数字j可直接相连的数字集合
例如l[0]=[2,4,5,6,8] 表示1(在2,5,4未被选择情况下)可直接与2,4,5,6,8相连
2.a取1或2或5
b取遍l[a-1]
c取遍l[b-1]
………………
3.每次在取下一个数时,重新修改数组l
例如在取c时,如果b=2(或4,,6,8)
把l中的2都删除,并且如果1,3都未被取过时,在l[0]中添加3,在l[2]中添加1
这样就避免了数字的重复,以及将213,231的特殊情况也考虑进来了
4.再用x统计循环次数,输出的x即表示九个点都取的情况下的解的个数。
接下来可依次减少i,h,g,f,e同理得到取8,7,6,5,4个点时解的个数。
具体编程要求助各位编程高手了~\(≥▽≤)/~啦啦啦,一起来码字吧!!
因为编程课还没有正式开,C语言也还没学,可能语言有些繁琐。 下面用python试着写一下:
'''
#先创建初始数组
l=[[2,4,5,6,8],[1,3,4,5,6,7,9],[2,4,5,6,8],[1,2,3,5,7,8,9],[1,2,3,4,6,7,8,9],[1,2,3,5,7,8,9],[2,4,5,6,8],[1,3,4,5,6,7,9],[2,4,5,6,8]]
#先求a=1时的解
a=1
for j in range(0,9): #此处将l中所有的1都删除
for k in l[j]:
if k==1:
p=l[j].index(1)
l[j].pop(p)
for b in l[a-1]:
for j in range(0,9): #此处将l中所有的b都删除
for k in l[j]:
if k==b:
p=l[j].index(b)
l[j].pop(p)
#表示已经出问题了+_+ 怎么把每次b的一次循环结束后将l恢复至删除b之前的状态?!!交给编程大神了。
总结
以上是生活随笔为你收集整理的九宫锁屏图案有多少种c语言编程,手机九宫格图案解锁问题,编程高手戳进来!...的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: legacy驱动
- 下一篇: HDU4847-Wow! Such Do