python 第六周第一题

来源:互联网 发布:p图很萌的软件 编辑:程序博客网 时间:2024/06/06 03:35

这题刚开始能做出正确答案,但是在oj上总是提交通不过,提示:程序异常,exit code 非0;后来检查了一下,按照题目输出格式修改,并且加了异常处理模块顺利通过

题目内容:

定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数),并返回一个按照升序排列的素数列表。使用递归来实现一个二分查找算法函数bi_search(),该函数实现检索任意一个整数在 prime() 函数生成的素数列表中位置(索引)的功能,并返回该位置的索引值,若该数不存在则返回 -1。

输入格式:

第一行为正整数 n

接下来若干行为待查找的数字,每行输入一个数字

输出格式:

每行输出相应的待查找数字的索引值

输入样例:

10

2

4

6

7

输出样例:

0

-1

-1

3

lst=[];def prime(num):    for i in range(2,num):        if num%i == 0:            return False    return Truedef bi_search(lst,m):    low=0    up=len(lst)-1    while low<=up:        mid=(low+up)/2        if lst[mid]<m:            low= mid+1        elif lst[mid]==m:            return mid        else:            up=mid-1    return -1n=int(raw_input());for i in range(2,n+1):    if prime(i):        lst.append(i)lst2=[]m=int(raw_input())lst2.append(m)while m!='':      try:                    m=int(raw_input())          lst2.append(m)      except:        breakfor i in lst2:      print bi_search(lst,i)
题目要求用递归二分法,但是循环也通过了,在题目给定范围的数字内素数一个列表,之后输进来检索的存入另一个,之后调用函数逐个输出结果即可

这里写图片描述

二分法用递归方法只通过了例一,应该是一些特殊数据没有考虑到,后续通过后,会贴出来,希望看到的朋友能分享一下正确的代码

lst=[];def prime(num):    for i in range(2,num):        if num%i == 0:            return False    return Truedef bi_search(lst,m,start,end):    if m<0 or end==0:        return -1    elif start>end:        return -1    mid=int(start+(end-start)/2)    if lst[mid]==m:        return mid;    elif m<lst[mid]:        return bi_search(lst,m,start,mid-1)    else:        return bi_search(lst,m,mid+1,end)n=int(raw_input());for i in range(2,n+1):    if prime(i):        lst.append(i)lst2=[]m=int(raw_input())lst2.append(m)while m!='':      try:                    m=int(raw_input())          lst2.append(m)      except:        breaklenth=len(lst)    for i in lst2:      print bi_search(lst,i,0,lenth)

这里写图片描述

原创粉丝点击