Python实验报告10+课堂练习10

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-x^{2}+x^{3}-x^{4}+ ...+(-1)^{n-1}x^{n}(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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值