D


私信TA

用户名:ALS1111

访问量:22109

签 名:

等  级
排  名 55
经  验 11377
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

题目不太好理解。

每次删除的是序列号,最后保留的也是序列号。

按题目案例来说m,n = 30,69

它的意思就是在31~68中有多少个序列号是最后保留下来的序列号。最后保留下来的个数就是幸运数的个数。

那么我们可以先创建一个大小为69的数组B = [i for i in range(n)]

首先我们要将B中下标能整除2的删除del B[2::2]

接着我们要将B中下标能整除B[2]的删除

然后将B中下标能整除B[3]的删除

然后将B中下标能整除B[4]的删除

......

循环终止的条件是B[now] >= len(B)-1

最后检查一下31~38中有几个在B中就可以了。


注意事项:

参考代码:

def f(m,n):
    A = [int(i) for i in range(m+1,n)]
    B = [i for i in range(n)]

    del B[2::2]    #先删除小标能整除2的
    
    now = 2
    while B[now] <= len(B)-1:   #循环终止条件
        del B[B[now]::B[now]]   #删除小标为B[now]的
        now = now+1

    ans = 0
    for item in A:       #检查A中的序列号有几个在B中
        if item in B:
            ans = ans+1
    print(ans)
    
            
if __name__ == '__main__':
    m,n = map(int,input().strip().split())
    f(m,n)


 

0.0分

7 人评分

  评论区

  • «
  • »