D


私信TA

用户名:ALS1111

访问量:19539

签 名:

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

  自我简介:

解题思路:

题目不太好理解。

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

按题目案例来说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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区