蓝桥杯算法——算法所有代码

Python二级
统计单词个数和数字个数
n=input()
dunm,dchr=0,0
for i in n:
    if  i.isnumeric():#isnumeric计算数字个数
        dunm+=1
    elif i.isalpha():#isaplha 计算字母个数
        dchr+=1
print("数字:{}个 字母:{}个" .format(dunm,dchr))

n=eval(input("请输入一个数字:"))
print("{:+^11}".format(chr(n-1)+chr(n)+chr(n+1)))#:是引导符 +是填充符号 向上的是居中对齐 11表示一共是11个宽度

s=eval(input("请输入一个数字:"))
print("{:-<20,}".format(s))#<是左对齐 >是右对齐 -是填充的符号 如果是+返回的便是+

h=list(input("请输入一段中文:"))
h=h[::-1]
for i in h:
    print(i,end="")


txt=input("请输入一段中文文本:")
ls=list(txt)
for i in ls[::-1]:
    print(i,end="")


import  random
brandlist=['华为','苹果','诺基亚','OPPO','vivo']
random.seed(0)#设置初始值并运用随机数的标准库
name=random.sample(brandlist,3)#从pop列表中选取k个元素,返回列表
print(name)


使用二分查找
满足二分查找条件:1.有序数组 2.无重复元素
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left,right  =0, len(nums)
        while left < right:
            mid = (left + right) // 2
            if nums[mid] < target:
                left = mid+1
            elif nums[mid] > target:
                right = mid
            else:
                return mid
        return -1
汉诺塔递推
def haois(n,a,b,c):#n为盘子,a,b,c为柱子
    if n>0:
        haois(n-1,a,c,b)
        print("moving from %s to %s"%(a,c))
        haois(n-1,b,a,c)
haois(3,'A','B','C')

顺序查找  从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止。
def linear_search(li,val):
    for ind,v in enumerate(li):
        if v==valL:
            return ind
    else:
        return None

力扣二分查找
def binary_search(li,val):
    left=0
    right=len(li)-1
    while (left<=right):
        middle=(left+right) // 2
        if li[middle]==val:
            return  middle
        elif li[middle]>val:
            return middle-1
        elif li[middle]<val:
            return middle+1
    else:
        return -1
li=[1,2,3,4,5,6,7,8,9,10]
print(binary_search(li,3))

列表每两个相邻的的数,如果前面比后面大,则交换这两个数。一趟排序完成后,则无序区减少一个数,有序区增加一个数,最后一趟时增加两个数
代码关键点:躺、无序区范围
升序冒泡排序
import random
def bubble_sortbub(li):
    for i in range(len(li)-1):#第多少趟
        for j in range(len(li)-i-1):
            if li[j] > li[j+1]:
                li[j],li[j+1]=li[j+1], li[j]

li = [random.randint(0,1000) for i in range(1000)]
print(li)
bubble_sortbub(li)
print(li)

# 降序冒泡排序
import random


def buble_sotr(ls):
    for i in range(len(ls) - 1):
        for j in range(len(ls) - i - 1):
            if ls[j] < ls[j + 1]:
                ls[j], ls[j + 1] = ls[j + 1], ls[j]
        print(ls)


ls = [random.randint(0, 1000) for i in range(1000)]
print(ls)
buble_sotr(ls)
print(ls)

#两列表对应个数相乘之和
res=[2,3,6,8]
re=[3,2,6,8]
s=0
for i in range(len(res)):
    for j in range(i,i+1):
        s+=res[i]*re[j]
print(s)

选择排序
def select_sort_simple(li):
    li_new=[]
    for i in range(len(li)):
        min_val=min(li)
        li_new.append(min_val)
        li.remove(min_val)
    return li_new
li= [3,2,4,1,5,6,8,7,9]
print(select_sort_simple(li))


s=list(input())
m=sorted(sorted(s),key=lambda x:s.count(x),reverse=True)[0]#计算重复值最多的单词然后取第一位
print(m,s.count(m),sep='\n')
res=0
res1=0
n=int(input())
if n<=10000 and n>=1:
    for i in range(1,n+1):
        x=int(input())
        if x >=85:
            res+=1#优秀
        if x>=60:
            res1+=1 #及格
    print("{:.0f}%".format(100*res/n))
    print(f"{
      
      round(100*res / n)}%")
    print("{}%".format(100*res/n))


import datetime #导入日期库
#20200202
idate=input()
year=int(idate[:4])#取出输入得年月日
month=int(idate[4:6])
day=int(idate[6:])
date=datetime.date(year,month,day)#2020-02-02 将输入的表示日期的字符串转换成日期
flag=True #回为日期只输出一次
for n in range(9999999):
    date=date+datetime.timedelta(days=1)#按日期格式不断增加1天
    sd=str(date).replace("-",'')#将日期中的-去掉

    if sd[:]==sd[::-1]:#判断日期是否是回文
        if flag:
            print(int(sd))#输出回文日期
            flag=False#下次不输出回文日期
        if sd[0]==sd[2]==sd[5]==sd[7] and sd[1]==sd[3]==sd[4]==sd[6]: #判断是否是ABABBABA类型
            print(int(sd))
            break

b = 0
for i in range(1, 2021):
    a = str(i).count('2')#只有字符串类型才能被计算
    b += a
print(b)

num = 0
for i in range(1,10000):
  num +=str(i).count('1')
  if 2021 == num:
    print(i)
    break

import datetime
start=datetime.date(2000,1,1)#转换为日期格式
end=datetime.date(2020,10,1)
days=datetime.timedelta(days=1)#不断+1
ans=0
while end>=start:#时间重合
  if start.day == 1 or start.weekday() ==0:#day=1是月初为1 weekday=0是周一
    ans+=2
  else:
    ans+=1
  start+=days
print(ans)

import datetime
start=datetime.date(2000,1,1)
end=datetime.date(2020,10,1)
days=datetime.timedelta(days=1)
ans=0
while end>=start:
    if start.day==1 or start.weekday()==0:
      ans+=2
    else:
      ans+=1
    start+=days#终止循环
print(ans)

res=[]
s=0
n=int(input())
if n>=1 and n<=1000:
    for i in range(1,n+1):
        x=str(input())
        res.append(x)
        s+=int(x)
print(max(res),min(res),sep='\n')
print("%.2f" %(s/n))


num=256*1024*1024//4
print(num)

for i in range(2, 20):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        pass


长度为K的等差素数数列,他的公差可以被任何一个小于k的素数整除
素数都是以1 2 3 5 7这几个数为个位数
num = [1, 2, 3, 5, 7]
for i in range(1, 10000):
    if i % 1 == 0 and i % 2 == 0 and i % 3 == 0 and i % 5 == 0 and i % 7==0:
        print(i)
        break#取最小公差值

import os
import sys
import math
# 请在此输入您的代码
#最大公约数是取出来的最大余数
c=0
for i in range(1,2021):
    for j in range(1,2021):
        if math.gcd(i,j)==1:#最大公约数是1
            c+=1
print(c)


count=0
for i in range(64):
      jie = 2 ** i
      count+=jie
print(count)


import datetime
year=datetime.date(1900,5,1)
days=datetime.timedelta(days=1)

for i in range(9999999999):
    new_year=str(year).replace("-","")
    year+=days
    if int(new_year)%2012==0 and int(new_year)%3==0 and int(new_year)%12==0 and new_year[4: 6] == "06":
        break
print(new_year)

import datetime
year=datetime.date(1900,1,1)
days=datetime.timedelta(days=1)#每天不断递增1
for i in range(99999):#加了99999天
    new_year=str(year).replace("-","")
    year+=days#每天递增肯定是需要相加的
    if int(new_year) % 2012==0 and int(new_year) %3==0 and int(new_year)%12==0 and new_year[4:6]=='06':#转为可以除的类型并且告诉了月份,制定条件
        break
print(new_year)


import datetime
#ABABBABA
idate=input()
year=int(idate[:4])#取出输入得年月日
month=int(idate[4:6])
day=int(idate[6:])
date=datetime.date(year,month,day)#2020-02-02 将输入的表示日期的字符串转换成日期
flag=True #回为日期只输出一次
for n in range(9999999):
    date=date+datetime.timedelta(days=1)#按日期格式不断增加1天
    sd=str(date).replace("-",'')#将日期中的-去掉

    if sd[:]==sd[::-1]:#判断日期是否是回文
        if flag:
            print(int(sd))#输出回文日期
            flag=False#下次不输出回文日期
        if sd[0]==sd[2]==sd[5]==sd[7] and sd[1]==sd[3]==sd[4]==sd[6]: #判断是否是ABABBABA类型
            print(int(sd))
            break

import datetime
#日期需要整型数据
date_input=input()
year=int(date_input[:4])
month=int(date_input[4: 6])
day = int(date_input[6: ])
days=datetime.timedelta(days=1)
date1=datetime.date(year,month,day)
flage=True#表示日期只需输出一次
for i in range(999999):
    date1+=days
    sd=str(date1).replace("-","")

    if sd[:] == sd[::-1]:#判断是不是回文日期 升序和降序相同
        if  flage:
            print(int(sd))
            flage=False#只输出一次
        if sd[0]==sd[2]==sd[5]==sd[7] and sd[1]==sd[3]==sd[4]==sd[6]:
            break
print(sd)

from datetime import datetime, timedelta

start = datetime(year=1970, month=1, day=1)
dela = timedelta(milliseconds=1)
now = int(input())

now = start +(now * dela)#×的是输入的秒数 并且相加递增
print('%02d:%02d:%02d' % (now.hour, now.minute, now.second))#输出小时,分钟,秒
#%02d:%02d:%02d

from datetime import *
start=datetime(year=1970,month=1,day=1)#增加秒数天数要用日期整数形式而不是字符串形式
dela=timedelta(milliseconds=1)
now=int(input())
now=start+(now*dela)#*秒数来递增来得到具体时间
print("%02d:%02d:%02d" %(now.hour,now.minute,now.second))
res=0
for i in range(2,100000):
    for j in range(2,i):
        if i % j==0:
            break
    else:
        res+=1
        print(i)
        if res==2019:
            break
print(res)

result=0
n=int(input())
res=['2','0','1','9']
for h in range(1,n+1):
    x=list(str(h))
    print(x)
    for i in res:
        if i in x:
            result+=h
            break
print(result)

nums=['2','0','1','9']
res=0
for x in range(1,41):
    y=list(str(x))#跟nums类型
    print(y)
    for i in nums:
        if i in y:
            res+=(x)
            break

print(res)

有奖猜谜
小明很喜欢猜谜语。
最近,他被邀请参加了X星球的猜谜活动。每位选手开始的时候都被发给777个电子币。规则是:猜对了,手里的电子币数目翻倍,
猜错了,扣除555个电子币, 扣完为止。小明一共猜了15条谜语。战果为:vxvxvxvxvxvxvvx
其中v表示猜对了,x表示猜错了。请你计算一下,小明最后手里的电子币数目是多少。请填写表示最后电子币数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字.

ans=777
for i in range(15):
    x=int(input("1是正确2是错误:"))
    if x==1:
       ans*=2
    elif x==2:
       ans-=555
print(ans)
5min

煤球数目

有一堆煤球,堆成三角棱锥形。具体:第一层放1个,
第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),
如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。


1 3 6 10 15 21
1 2 3 4 5 6
不断地递增12开始
ans=0
result=0
for i in range(100):
    i+=1
    ans+=i#在前一项递增的差数上+i 始终保持ans=前一项
    result += ans#把和存起来了
print(result)


标题:哪天返回

小明被不明势力劫持。后被扔到x星站再无问津。小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文。
他决定在x星战打工。好心的老板答应包食宿,第1天给他1元钱。
并且,以后的每一天都比前一天多2元钱,直到他有足够的钱买票。
请计算一下,小明在第几天就能凑够108元,返回地球。
1 2 3 4 5
1 3 7 13 21 31
要求提交的是一个整数,表示第几天。请不要提交任何多余的内容.
count=0
c=0
x=1
while x<108:
    c+=2
    x+=c
    count+=1#天数
print(count+1)
11天
res=0
ans=0
y=0
for i in range(10):
    ans+=2
    res+=ans
    y+=1
    if res>=108:
        break
print(y+1)


平方怪圈
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。


x=input("请输入整数:")#代替输入的数字
rec=[]#创建一个列表
s=0
while s not in rec:#表示每个数字都不包括零
    rec.append(s)
    s=0
    a=list(str(x))# 每个数单独分开平方
    for i in range(len(a)):
        s+=int(a[i])**2
        x=s #表示s得结果递归下一次循环 代替了x的输入
print(s)
print(rec)


from datetime import datetime, timedelta

start=datetime(year=1970,month=1,day=1)
dela=timedelta(milliseconds=1)

now=int(input())
now=now*dela+start

print("%02d:%02d:%02d" %(now.hour,now.minute,now.second))

from datetime import datetime, timedelta

start = datetime(year=1970, month=1, day=1)
dela = timedelta(milliseconds=1)
now = int(input())

now = start +(now * dela)#×的是输入的秒数 并且相加递增
print('%02d:%02d:%02d' % (now.hour, now.minute, now.second))#输出小时,分钟,秒
#%02d:%02d:%02d

猜你喜欢

转载自blog.csdn.net/m0_62491934/article/details/124028912