11月02日(第4天_八皇后、递归(因数分解、阶乘))
来源:互联网 发布:python pyqt5 安装 编辑:程序博客网 时间:2024/06/07 04:51
今天主要讲了八皇后、递归。
1.
(1) 八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。目前用图论的方法解出92种结果。
其中的8种结果是在每行依次填[0,2,4,6,1,3,5,7]这个循环数列(如果第一行填5,第二行就填写7,第三行就填写0,这样依次填好)。现要求每行依次填:[0,2,4,6,1,3,5,7],将其打印出一个。
#八皇后序列,每行依次填:[0,2,4,6,1,3,5,7],先打印出一个t = [0,2,4,6,1,3,5,7]high = max(t)+1width = len(t)#1.生成棋盘u1 = [' ',]*width #这里的复制也要注意u = []i = 1while i<=high: u.append(u1.copy())#这里一定要留意 #错误代码:u = u.append(u1.copy()) #错误原因:'NoneType' object has no attribute 'append' i = i+1# u#2.按行打印ti = 0for k in t: u[i][k] = "Q" i = i+1u
运行结果:
[['Q', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', 'Q', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', 'Q', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', 'Q', ' '], [' ', 'Q', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', 'Q', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', 'Q', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'Q']]
(2) 八皇后问题,把按照[0,2,4,6,1,3,5,7]循环填的8种可能都打印出来。
sequence = [0,2,4,6,1,3,5,7,0,2,4,6,1,3,5,7]#1.每次都要重新生成棋盘,不然就会被上一个填好的u盖住,故定义一个生成棋盘的函数def qipan(): u1 = [' ',]*8 #这里的复制也要注意 u = [] ; i = 1 while i<=8: u.append(u1.copy())#这里一定要留意 #错误代码:u = u.append(u1.copy()) #错误原因:'NoneType' object has no attribute 'append' i = i+1 return(u)u = qipan()#2.填皇后for j in range(8): u=qipan() seq = sequence[j:j+8] row = 0 for q in seq: u[row][q] = '*' row = row+1 print(seq) print(u)
运行结果:
[0, 2, 4, 6, 1, 3, 5, 7][['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', '*', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', '*', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', '*', ' '], [' ', '*', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', '*', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', '*', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']][2, 4, 6, 1, 3, 5, 7, 0][[' ', ' ', '*', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', '*', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', '*', ' '], [' ', '*', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', '*', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', '*', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'], ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' ']][4, 6, 1, 3, 5, 7, 0, 2][[' ', ' ', ' ', ' ', '*', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', '*', ' '], [' ', '*', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', '*', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', '*', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'], ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', '*', ' ', ' ', ' ', ' ', ' ']][6, 1, 3, 5, 7, 0, 2, 4][[' ', ' ', ' ', ' ', ' ', ' ', '*', ' '], [' ', '*', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', '*', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', '*', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'], ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', '*', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', '*', ' ', ' ', ' ']][1, 3, 5, 7, 0, 2, 4, 6][[' ', '*', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', '*', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', '*', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'], ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', '*', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', '*', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', '*', ' ']][3, 5, 7, 0, 2, 4, 6, 1][[' ', ' ', ' ', '*', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', '*', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'], ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', '*', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', '*', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', '*', ' '], [' ', '*', ' ', ' ', ' ', ' ', ' ', ' ']][5, 7, 0, 2, 4, 6, 1, 3][[' ', ' ', ' ', ' ', ' ', '*', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'], ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', '*', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', '*', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', '*', ' '], [' ', '*', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', '*', ' ', ' ', ' ', ' ']][7, 0, 2, 4, 6, 1, 3, 5][[' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'], ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', '*', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', '*', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', '*', ' '], [' ', '*', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', '*', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', '*', ' ', ' ']]
接下来是Tim Chan大神处理这个问题的代码,又简洁打印出来又美观:
li = [0,2,4,6,1,3,5,7]for j in range(8): li2 = li[j:]+li[:j] print('-------------------%d-------------------'% (j+1)) print(li2) for i in li2: s = [' ']*8 s[i] = '*' print(str(s))
运行结果:
-------------------1-------------------[0, 2, 4, 6, 1, 3, 5, 7]['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', '*', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', '*', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', '*', ' '][' ', '*', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', '*', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', '*', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']-------------------2-------------------[2, 4, 6, 1, 3, 5, 7, 0][' ', ' ', '*', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', '*', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', '*', ' '][' ', '*', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', '*', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', '*', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']['*', ' ', ' ', ' ', ' ', ' ', ' ', ' ']-------------------3-------------------[4, 6, 1, 3, 5, 7, 0, 2][' ', ' ', ' ', ' ', '*', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', '*', ' '][' ', '*', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', '*', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', '*', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', '*', ' ', ' ', ' ', ' ', ' ']-------------------4-------------------[6, 1, 3, 5, 7, 0, 2, 4][' ', ' ', ' ', ' ', ' ', ' ', '*', ' '][' ', '*', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', '*', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', '*', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', '*', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', '*', ' ', ' ', ' ']-------------------5-------------------[1, 3, 5, 7, 0, 2, 4, 6][' ', '*', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', '*', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', '*', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', '*', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', '*', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', '*', ' ']-------------------6-------------------[3, 5, 7, 0, 2, 4, 6, 1][' ', ' ', ' ', '*', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', '*', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', '*', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', '*', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', '*', ' '][' ', '*', ' ', ' ', ' ', ' ', ' ', ' ']-------------------7-------------------[5, 7, 0, 2, 4, 6, 1, 3][' ', ' ', ' ', ' ', ' ', '*', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', '*', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', '*', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', '*', ' '][' ', '*', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', '*', ' ', ' ', ' ', ' ']-------------------8-------------------[7, 0, 2, 4, 6, 1, 3, 5][' ', ' ', ' ', ' ', ' ', ' ', ' ', '*']['*', ' ', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', '*', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', '*', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', ' ', '*', ' '][' ', '*', ' ', ' ', ' ', ' ', ' ', ' '][' ', ' ', ' ', '*', ' ', ' ', ' ', ' '][' ', ' ', ' ', ' ', ' ', '*', ' ', ' ']
2. 对给出的正整数进行质因数分解,如60 = 2*2*3*5。
num0 = input('Please input a number:')num = int(num0)L1 = []def fenjie(num): for i in range(2,num+1): if num % i ==0: L1.append(i) fenjie(int(num/i)) #为什么 return fenjie(int(num/i))不行? return L1fenjie(num)
3. 定义一个函数用于求阶乘。
def jiecheng(n): if n ==1: return 1 return n * jiecheng(n - 1) jiecheng(4)
阅读全文
0 0
- 11月02日(第4天_八皇后、递归(因数分解、阶乘))
- poj2992(Divisors)(阶乘因数分解)
- 百练 分解因数(递归)
- 八皇后 (递归)
- 八皇后问题(递归)
- 八皇后问题(递归)
- 八皇后(递归实现)
- 八皇后问题(递归)
- 八皇后问题(递归)
- 八皇后问题(递归+非递归)
- 11月01日(第3天_回纹数、直方图和质数)
- 八皇后问题(牛人非递归版)
- 八皇后问题(非递归版)
- 八皇后问题(递归版)
- 八皇后问题递归实现(C++)
- 八皇后问题(递归+回溯)
- 八皇后问题(递归+回溯)
- 八皇后求解方法(递归求解)
- C++ 引用的简单理解
- Error while Installing APK
- Andrew NG 机器学习 笔记-week11-应用实例:图片文字识别(Application Example:Photo OCR)
- MVP个人理解
- MVP+Rxjava+Fresco+Retrofit实现Recyclerview列表展示
- 11月02日(第4天_八皇后、递归(因数分解、阶乘))
- spring学习的部分资料
- ZOJ 3224(数学+暴力)
- 线段树
- ftp vsftpd 530 login incorrect 解决办法汇总
- MySQL8.03 RC 已发布
- STL常用算法
- PreparedStatement和Statement
- Selective Search for Object Recognition(IJCV 2013) 论文及代码解读