1、编程实现:在一定范围内验证哥德巴赫猜想:任何一个大于5的整数,均可表示为3个素数之和。例如6=2+2+2,10=2+3+5。要求将 6-100 以内所有的整数都表示成三个素数之和并输出。要求:参照以下程序结构,将程序补充完整,并调试运行成功。
def fenjie(x):
for m in range(2,x//3+1):
for n in range(2,(x-m)//2+1):
if isprime(m)==1 and isprime(n)==1 and isprime(x-m-n)==1:
print("{}={}+{}+{}".format(x,m,n,x-m-n))
return True
print("{}例外".format(x))
return False
def isprime(y):
if y<=1:
return 0
else:
for i in range(2,y):
if y%i==0:
return 0
return 1
count=0
print("验证结果如下:")
for i in range(6,101):
if fenjie(i)==False:
count+=1
print("一共发现了{}个例外的整数".format(count))
2、编程实现:用递归的方法求解下列式子的计算问题。
f(x,n)=x-+
-
+ ...+
(n>0)
输入输出示例:
请输入x,n的值:2,6
计算结果为:-42
def f(x,n):
if n==1:
return x
else:
return f(x,n-1)+(-1)**(n-1)*x**n
x,n=eval(input("请输入x,n的值:"))
s=f(x,n)
print("计算结果为:{}".format(s))
3、八皇后问题
递归法,但是没输出八皇后的排列方式,仅仅把多少种输出来了。
def queen(n,row=0,cols=[],xy_add=[],xy_sub=[]):
if row==n:#如果行数和皇后个数相等排序完成
return 1
else:
count=0
for col in range(1,n+1):
if col in cols or row+col in xy_add or row-col in xy_sub:#如果出现冲突就结束
continue
count+=queen(n,row+1,cols+[col],xy_add+[row+col],xy_sub+[row-col])
return count
print("一共有{}种摆法".format(queen(8)))
下面这个输出了摆法
def queen(sc, length=0):
global n
if length == len(sc):
n=n+1
print(sc)
return 0
for y in range(len(sc)):
sc[length], flag = y, True
for x in range(length):
if sc[x] == y or abs(y - sc[x]) == length - x:
flag = False
break
if flag:
queen(sc, length+1)
n=0
queen([None]*8)
print("一共有{}种摆法".format(n))
下面这个是穷举验证法:
def check(x):#检查是否符合要求的函数
for i in range(0,7):
for j in range(i+1,8):
if ((i+1)-x[i]==(j+1)-x[j]) or ((i+1)+x[i]==(j+1)+x[j]) or (x[i]==x[j]):
return False
return True
from itertools import permutations
alist=permutations([1,2,3,4,5,6,7,8],8)#用函数把8个数字排列组合都列举出来
cnt=0
for x in alist:
if check(x):
cnt+=1
print(x)
print(cnt)
课堂练习10内容:
def f(n=int):
if n==0:
return 0
elif n==1:
return 1
else:
return f(n-2)+f(n-1)
n=int(input("请输入n的值:"))
s=""
for i in range(n+1):
s=s+str(f(i))+" "
print("对应的数列为:{}".format(s[:-1]))
import turtle
def koch(size,n):
if n==0:
turtle.fd(size)
else:
for angle in[0,60,-120,60]:
turtle.left(angle)
koch(size/3,n-1)
def main(level):
turtle.penup()
turtle.goto(-300,-50)
turtle.pendown()
turtle.pensize(2)
koch(600,level)
try:
level=eval(input("请输入科赫曲线的阶:"))
main(level)
except:
print("输入错误")
steps=0
def hanoi(src,des,mid,n):
global steps
if n==1:
steps+=1
print("[STEP{:>4}] {}->{}".format(steps,src,des))
else:
hanoi(src,mid,des,n-1)
hanoi(src,des,mid,1)
hanoi(mid,des,src,n-1)
N=eval(input())
hanoi("A","C","B",N)