4-1

下面流程图中,输入自然数27,结束时n等于_____(2分)
(对Python语言而言,流程图中n=n/2就是n=n//2。对C语言而言,流程图中n=n/2就是n=n/2。)

python程序代码填空题 python填空题答案_冒泡排序


答案:1


4-2

下面流程图中,a,b,c输入都是5,结束前会执行"1,2,3"那个选项?_____(2分)
1(b是最大数)
2(c是最大数)
3(a是最大数)

python程序代码填空题 python填空题答案_折半查找_02


答案:2


4-3

下面冒泡排序程序的输出结果是_____(2分)。

def bubble_sort(nums):
    # 这个循环负责设置冒泡排序进行的次数
    for i in range(len(nums) - 1):  
        for j in range(len(nums) - i - 1):  # j为列表下标
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
        if i==2:print(nums[5])
    return nums

bubble_sort([45, 32, 8, 33, 12, 22, 19, 97])

答案:33


4-4

下面程序的输出值是_____(2分)。

def bubble_sort(nums):
    # 这个循环负责设置冒泡排序进行的次数
    rst=0
    for i in range(len(nums) - 1):  
        for j in range(len(nums) - i - 1):  # j为列表下标
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
        if i==0 or i==3:
            rst=rst+nums[5]
    return rst

print(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97]))

答案:52


4-5

下面选择法排序程序的输出是_____(2分)。

def selectionSort(arr):
    for i in range(len(arr) - 1):
        # 记录最小数的索引
        minIndex = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[minIndex]:
                minIndex = j
        # i 不是最小数时,将 i 和最小数进行交换
        if i != minIndex:
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
        if i==2:print(arr[5])
    return arr

selectionSort([33,6,9,7,-1,100,-32])

答案:100


4-6

下面是进制转换程序。输入16,输出是_____(2分)。

n=int(input())
lst=[]
while n>0:
    lst.insert(0,n%2)
    n=n//2
print(lst[3])

答案:0


4-7

下面程序的输出值是_____(2分)。

def f(n):           
    result=[3,4]    
    for i in range(n-2):
        result.append(result[-2]+result[-1]+2)
    return result[-1]  

print(f(5))

答案:26


4-8

下面是折半查找程序。输入是101时,输出是_____(2分)。

a=[5,16,39,45,51,98,100,202,226,321,368,444,501]
x = int(input())
found = -1
left = 0                      #第一个元素下标
right = len(a)-1              #最后一个元素下标
while left<=right:
    mid = (left + right) // 2
    if a[mid] > x:
        right = mid - 1
    elif a[mid] < x:
        left = mid + 1
    else:                     # a[mid]==x
        found = mid
        break
print(left)

答案:7


4-9

下面是用分治算法编写的程序,程序的输出是_____(2分)。

def min_max(a):
    if len(a)==1:
        return (a[0],a[0])
    elif len(a)==2:
        return (min(a),max(a))
    else:
        m=len(a)//2
        lmin,lmax=min_max(a[:m])
        rmin,rmax=min_max(a[m:])
        return (min(lmin,rmin),max(lmax,rmax))

a,b=min_max([3,8,9,4,10,5,1,17,9,-5])
print(a+b)

答案:12


4-10

*下面是背包问题的决策树,背包可存放的最大重量为5.
a,b,c,d是四件物品,Value,Weight分别表示价值和重量。背包可存放物品的最大价值是多少?
每个方框代表一个状态。 方框的第一个数字是方框标号,{a}表示背包中有a物品,[c,d]表示可以放入背包的物品是b,d。
方框第二行的两个数字分别表示背包中物品的现有价值和剩下可放物品的重量。
可以重用方框3结果的方框标号是_____(2分)。

python程序代码填空题 python填空题答案_冒泡排序_03


python程序代码填空题 python填空题答案_折半查找_04


答案:9


4-11

*下面程序是二叉查找树。程序的输出是_____(4分)。

def lookup(bst, cVal):
    return lookupHelper(bst, cVal, 'root')

def lookupHelper(bst, cVal, current):
    if current == '':
        return False
    elif bst[current][0] == cVal:
            return True
    elif (cVal < bst[current][0]):
        return lookupHelper(bst, cVal, bst[current][1])
    else:
        return lookupHelper(bst, cVal, bst[current][2])


#Insert into a binary tree.
#note that here, val is just the numeric value of the vertex
#'' is the empty value for a vertex name, meaning that there is no vertex there.
def insert(name, val, bst):
    return insertHelper(name, val, 'root', bst)

def insertHelper(name, val, pred, bst):
    predLeft = bst[pred][1]
    predRight = bst[pred][2]
    if ((predRight == '') and (predLeft == '')):
        if val < bst[pred][0]:
            bst[pred][1] = name
        else:
            bst[pred][2] = name
        bst[name] = [val, '', '']
        return bst
    elif (val < bst[pred][0]):
        if predLeft == '':
            bst[pred][1] = name
            bst[name] = [val, '', '']
            return bst
        else:
            return insertHelper(name, val, bst[pred][1], bst)
    else:
        if predRight == '':
            bst[pred][2] = name
            bst[name] = [val, '', '']
            return bst
        else:
            return insertHelper(name, val, bst[pred][2], bst)


#In order traversal of the tree
def inOrder(bst):
    outputList = []
    inOrderHelper(bst, 'root', outputList)
    return outputList

def inOrderHelper(bst, vertex, outputList):
    if vertex == '':
        return

    inOrderHelper(bst, bst[vertex][1], outputList)
    outputList.append(bst[vertex][0])
    inOrderHelper(bst, bst[vertex][2], outputList)
    return

BST = {}
BST['root'] = [22, '', '']
insert('A', 14, BST)
insert('B', 33, BST)
insert('C', 2, BST)
insert('D', 17, BST)
insert('E', 27, BST)
print(inOrder(BST)[3])

答案:22


4-12

*下面程序用回溯方法走迷宫。print([5,4] in path)语句的输出是_____(4分)。

#走迷宫
from turtle import *
m=[[1,1,1,0,1,1,1,1,1,1],[1,0,0,0,0,0,0,0,1,1],[1,0,1,0,1,1,1,0,0,1],
[1,0,1,0,0,0,0,1,0,1],[1,0,1,0,1,1,0,0,0,1],[1,0,0,1,1,0,1,0,1,1],
[1,1,1,1,0,0,0,0,1,1],[1,0,0,0,0,1,1,1,0,0],[1,0,1,1,0,0,0,0,0,1],
[1,1,1,1,1,1,1,1,1,1]]

def jumpto(x,y):
    up();goto(x,y);down()

def drawBox(x,y,size,blocked):
    color("black");jumpto(x,y)
    if blocked:
        fillcolor("black") #颜色填充函数
        begin_fill()
        for i in range(4):forward(size);right(90)
        end_fill()
    else:
        for i in range(4):
            forward(size/6);up();forward(size/6*4);down()
            forward(size/6);right(90)

def draw_myth():
    global m;reset();speed('fast');size=40
    for i in range(0,len(m)):
        for j in range(0,len(m[i])):
            drawBox(-200+j*size,200-i*size,size,m[i][j])


sta1=0;sta2=3;fsh1=7;fsh2=9; success=0
path=[]
size=40
r=(size-10)/2
global mouse
mouse= Turtle()  
x=-200+3*size+size/2
y=200-0*size-size/2
mouse.up()
mouse.goto(x,y)
mouse.speed(1)
mouse.down()
from turtle import *
def LabyrinthRat():
    global m
    print("显示迷宫:")
    for i in range(len(m)):
            print(m[i])
    print("入口:m[%d][%d]:出口:m[%d][%d]"%(sta1,sta2,fsh1,fsh2))
    if (visit(sta1,sta2,sta1,sta2))==0: 
            print("没有找到出口")
    else:print("显示路径:")
    for i in range(10):print(m[i])  
def visit(i,j,p,q):
    global m
    m[i][j]=2;x=-200+j*size+size/2;y=200-i*size-size/2;
    mouse.pencolor("black");mouse.goto(x,y)
    global success,path
    path.append([i,j])
    if(i==fsh1)and(j==fsh2): success=1
    if(success!=1)and(m[i-1][j]==0): visit(i-1,j,i,j)
    if(success!=1)and(m[i+1][j]==0): visit(i+1,j,i,j)
    if(success!=1)and(m[i][j-1]==0): visit(i,j-1,i,j)
    if(success!=1)and(m[i][j+1]==0): visit(i,j+1,i,j)
    if success!=1:
        m[i][j]=3; x=-200+q*size+size/2;
        y=200-p*size-size/2;mouse.pencolor("white");
        mouse.goto(x,y)
    return success

tracer(False);draw_myth();tracer(True);LabyrinthRat()
print([5,4] in path)

答案:False


4-13

*这是四皇后回溯程序,用生成器函数实现。它的运行输出是_____(4分)。

#在当前state状态下,下一行放在nextx列
#返回True表示冲突
def conflict(state,nextx):
    nexty=len(state)
    for i in range(nexty):
        if abs(state[i]-nextx) in (0,nexty-i) or (nexty,nextx)==(1,3):
            return True
    return False

#state是列表,state[0]是第一行的列,state[1]是第二行的列...
def queens(num=8,state=[]):
    for pos in range(num):
        if not conflict(state,pos):
            if len(state)==num-1:
                yield [pos]
            else:
                for result in queens(num,state+[pos]):
                    yield [pos]+result

lst=(list(queens(4)))
print(lst[0][2])

答案:3