python算法学习——第9天

导读:本篇文章讲解 python算法学习——第9天,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

时隔将近一个月,再更新几个算法题(自己实在是太懒了)

一、小明的密码

小明的电子邮件密码忘记了,请你帮他找出密码,他零星地记得密码的信息如下:

密码是六位数字,前面两位是31
最后两位数字相同
能被16和46整除

在这里插入图片描述
在这里插入图片描述

count = 0
for i in range(9+1):
    for j in range(9+1):
        for k in range(9+1):
            if (31*10000+i*1000+j*100+k*10+k*1)%16==0 and (31*10000+i*1000+j*100+k*10+k*1)%46==0:
                print(("3"+"1"+str({})+str({})+str({})+str({})).format(i,j,k,k))
                count += 1
print(count)

二、计算阶乘 N!

输入一个正整数n,求 n!

def jiecheng(n):
    if n<=1:
        return 1
    else:
        return n*jiecheng(n-1)
n = int(input())
print(jiecheng(n))

三、数字游戏

有一个数字游戏是这样的,从一个整数开始,比如6593

将这个整数的各位数字全部取出,将它们相乘,得到一个新的整数,然后重复这个操作,8 * 1 * 0 =0,得到一个个位数0

请你完成这个游戏,读入一个数并计算出由游戏得到一个个位数的过程。
在这里插入图片描述
思路:可以定义一个函数用来将一个数拆分并返回拆封之后各个独立项之和,然后循环调用此函数即可。

def gameHanshu(n):
    s = 1
    lenth = len(str(n))  # lenth->int
    for i in range(1,lenth+1):
        if i!=lenth:
            a = (n//(10**(lenth-i)))%10
        else:
            a = n%10
        s = s * a
    return s

n = int(input())
print(n,end=' ')
while 1:
    n = gameHanshu(n)
    if len(str(n))!=1:
        print(n,end=' ')
    else:
        print(n)
        break

四、孪生素数

求出3到n以内的所有孪生素数

所谓孪生素数是指间隔为2的两个相邻素数,因为它们之间的距离已经
近的不能再近了,如同孪生兄弟一样,所以将这一对素数称之为孪生素数
3~100以内的孪生素数一共有8对,分别是(3,5) (5,7) (11,13) (17,19) (29,31) (41,43) (59,61) (71,73)

思路:为了避免运行超时,可以采用埃氏筛法

在这里插入图片描述

#埃氏筛法
n = int(input())
li = [1 for i in range(n+1)]
#li[2]=0
#li[3]=0
count = 0    # 计数
for i in range(2,n+1-2):
    if li[i]==1:
        if i*i<n+1:
            for j in range(i*i,n+1,i):
                li[j]=0
    if li[i] and li[i+2]:
        count += 1
        #print("({},{})".format(i,i+2))
print(count)

五、小木棍

n根小木棍,选择3根小木棍来组成一个三角形🔺,但是他的小木棍实在是太多啦,他希望你来帮他数数三角形的个数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路:可以先对数据进行升序排序生成一个列表a,并设置一个左“指针”left和一个右“指针”right,left指向第一个数据,right指向倒数第二个数据,a[i]为最后一个数据,如果left指向第的数据和right指向的数据还有a[i]可以组成一个三角形,那么left和right之间的数据也可以和a[i]组成三角形🔺,这样将 i 不断地从左到右依次循环定位得出三角形个数。
在这里插入图片描述

def hanshu(n):
    a = list(map(int, input().split()))
    a.sort()
    count = 0
    if(n<3):
        return 0
    for i in range(n-1,1,-1):
        left = 0  # 左指针
        right = i-1 # 右指针
        while(left < right):
            if((a[left] + a[right]) > a[i]):
                count = count + (right-left)
                right -= 1
            else:
                left += 1
    return count

n = int(input())

print(hanshu(n))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74942.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!