Python-----实验五作业二

一.简答题(共5题,100.0分)

1 编写函数,实现选择法排序。(上传代码和运行结果截图)

正确答案:

def selectSort(lst, reverse=False):

    length = len(lst)

    for i in range(0, length):

        #假设剩余元素中第一个最小或最大

        m = i

        #扫描剩余元素

        for j in range(i+1, length):

            #如果有更小或更大的,就记录下它的位置

            exp = 'lst[j] < lst[m]'

            if reverse:

                exp = 'lst[j] > lst[m]'

            if eval(exp):

                m = j

        #如果发现更小或更大的,就交换值

        if m!=i:

            lst[i], lst[m] = lst[m], lst[i]

我的答案:

def sort(A):

    for i in range(len(A)):

        min = i

        for j in range(i + 1, len(A)):  

            if A[min] > A[j]:  

                min = j

        A[i], A[min] = A[min], A[i]  



    print ('排序后的数组:', A)

A=list(map(int, input("输入要排序的数:").split()))

sort(A)

运行结果:

输入要排序的数:5 4 78 36 1 6

排序后的数组: [1, 4, 5, 6, 36, 78]

2 编写函数,实现二分法查找。(上传代码和运行结果截图)

正确答案:

def binarySearch(lst, value):

    start = 0

    end = len(lst)

    while start < end:

        #计算中间位置

        middle = (start + end) // 2

        #查找成功,返回元素对应的位置

        if value == lst[middle]:

            return middle

        #在后面一半元素中继续查找

        elif value > lst[middle]:

            start = middle + 1

        #在前面一半元素中继续查找

        elif value < lst[middle]:

            end = middle - 1

    #查找不成功,返回False

    return False

我的答案:

d

ef sort(A):

    for i in range(len(A)):

        min = i

        for j in range(i + 1, len(A)):  

            if A[min] > A[j]:  

                min = j

        A[i], A[min] = A[min], A[i]  



    print ('排序后的数组:', A)

A=list(map(int, input("输入要排序的数:").split()))

sort(A)





def Search(alist, item):

    n = len(alist)

    if n == 0:

        return False

    else:

        mid = n // 2

        if alist[mid] == item:

            return True

        elif item < alist[mid]:

            return Search(alist[: mid], item)

        else:

            return Search(alist[mid + 1:], item) 

        

item = int(input("搜索值:"))

print(Search(A,item))

运行结果:

输入要排序的数:8 9 1 4 2 3

排序后的数组: [1, 2, 3, 4, 8, 9]

搜索值:1

True

3 编写函数,查找给定序列的最长递增子序列。(上传代码和运行结果截图)

正确答案:

from itertools import combinations

from random import sample



def subAscendingList(lst):

    '''返回最长递增子序列'''

    for length in range(len(lst), 0, -1):

        #按长度递减的顺序进行查找和判断

        for sub in combinations(lst, length):

            #判断当前选择的子序列是否为递增顺序

            if list(sub) == sorted(sub):

                #找到第一个就返回

                return sub

def getList(start=0, end=1000, number=20):

    '''生成随机序列'''

    if number > end-start:

        return None

    return sample(range(start, end), number)



def main():

    #生成一个包含10个随机数的列表进行测试

    lst = getList(number=10)

    if lst:

        print(lst)

        print(subAscendingList(lst))



main()

运行结果:

[608, 543, 915, 787, 545, 128, 930, 852, 844, 322]

(608, 915, 930)

4 编写函数,寻找给定序列中相差最小的两个数字。(上传代码和运行结果截图)

正确答案:

import random



def getTwoClosestElements(seq):

    #先进行排序,使得相邻元素最接近

    #相差最小的元素必然相邻

    seq = sorted(seq)

    #无穷大

    dif = float('inf')

    #遍历所有元素,两两比较,比较相邻元素的差值

    #使用选择法寻找相差最小的两个元素

    for i,v in enumerate(seq[:-1]):

        d = abs(v - seq[i+1])

        if d < dif:

            first, second, dif = v, seq[i+1], d

    #返回相差最小的两个元素

    return (first, second)



seq = [random.randint(1, 10000) for i in range(20)]

print(seq)

print(sorted(seq))

print(getTwoClosestElements(seq))

运行结果:

原序列: [2462, 6108, 330, 1112, 9219, 8152, 5373, 3708, 4292, 7772, 6783, 2107, 8479, 4355, 9791, 2815, 1456, 8381, 406, 6948]

排序后: [330, 406, 1112, 1456, 2107, 2462, 2815, 3708, 4292, 4355, 5373, 6108, 6783, 6948, 7772, 8152, 8381, 8479, 9219, 9791]

结果: (4292, 4355)

5 利用蒙特.卡罗方法计算圆周率近似值。(上传代码和运行结果截图)

正确答案:

from random import random



def estimatePI(times):

    hits = 0

    for i in range(times):

        x = random()*21 #random()生成介于0和1之间的小数

        y = random()*2 - 1 #该数字乘以2再减1,则介于-1和1之间

        if x*x + y*y <= 1:       #落在圆内或圆周上

            hits += 1

    return 4.0 * hits/times



print(estimatePI(10000))

print(estimatePI(1000000))

运行结果:

3.1444

3.141404

发布了27 篇原创文章 · 获赞 3 · 访问量 1418

猜你喜欢

转载自blog.csdn.net/weixin_41860600/article/details/105484567