寒假备赛蓝桥杯Python组训练题一

本文介绍了编程中涉及的几个数学和字符串处理问题,包括在给定条件下寻找特定组合的数字迷宫计数、特殊数之和的判断、等腰三角形的构建、航班时间计算、重复字符串修改次数、超级质数查找以及成绩分析和单词频率统计。
摘要由CSDN通过智能技术生成

目录

1、数字迷宫

2、特别数的和

3、等腰三角形

4、航班时间

5、重复字符串

6、 超级质数

7、成绩分析

8、单词分析 

1、数字迷宫

解题思路:枚举 暴力 但运行时间长(适合做填空题) a的范围【1,n//3】b的范围【a+1,2*n//3】

n = int(input())
count = 0
for a in range(1, n//3):
    for b in range(a+1, 2*n//3):
        c = n - a - b
        if (a+b)<2*n//3 and c>b and a != b and b != c and a != c and str(a).find('2') == -1 and str(a).find('4') == -1 and str(b).find('2') == -1 and str(b).find('4') == -1 and str(c).find('2') == -1 and str(c).find('4') == -1:
            count += 1
          
print(count)

2、特别数的和

解题思路:判断字符是否包含1、2、0、9 然后求和

count=0
n=int(input())
for i in range(1,n+1):
  a=str(i)
  if "1" in a or "2" in a or "0" in a or "9" in a:
    count=count+i
print(count)

3、等腰三角形

解题思路:根据三角形找出规律 用s字符串包含1234567891011.......根据规律需要进行切割


n = int(input())
s = '0'
for i in range(1, 10000):
    s += str(i)

print("." * (n - 1) + s[1])
for j in range(2, n):
    a = ''
    a += '.' * (n - j) + s[j] + "." * (2 * j - 3) + s[4 * n - j - 2]
    print(a)
print(s[n:3*n-1])

4、航班时间

解题思路:数学问题:求出飞行时间 对输入的字符串以空格分开 根据两位切割为时分秒、化为秒计算,再还原时间格式

def fight_time():
  line = str(input()).split(' ')
  h1 = int(line[0][0:2])
  m1 = int(line[0][3:5])
  s1 = int(line[0][6:8])
  
  h2 = int(line[1][0:2])
  m2 = int(line[1][3:5])
  s2 = int(line[1][6:8])
  
  day = 0
  if len(line) == 3:
    day = int(line[2][2])
  
  s = h1 * 3600 + m1 * 60 + s1 
  e = h2 * 3600 + m2 * 60 + s2

  return e - s + day * 24 * 3600

n = int(input())
for i in range(n):
  ans = (fight_time() + fight_time()) / 2
  hh = int(ans / 3600)
  mm = int(ans / 60 % 60)
  ss = int(ans % 60)
  print("{:0>2d}:{:0>2d}:{:0>2d}".format(hh,mm,ss))

5、重复字符串

解题思路:根据键值对 步长为len(s)//k 依次判断是否相同,计算修改次数然后相加

k = int(input())
a = list(input())
n = len(a)//k
ans = 0
for i in range(n):
  dic ={}
  for j in range(i,len(a),n):
    if a[j] in dic:
      dic[a[j]] = dic[a[j]]+1
    else:
      dic[a[j]] = 1
  m = max(dic.values())
  ans = ans + (k-m)
print(ans)

6、 超级质数

答案:373

import math
def isPrime(num):
    if num==2 or num==3:
        return 1
    else:
        n=int(math.sqrt(num))
        for i in range(2,n+1):
            if num%i==0:
                return 0
        else:
            return 1
cd=[2,3,5,7]
ls=[]
for i in cd:
    for j in cd:
        for k in cd:
            if isPrime(i*100+j*10+k) and isPrime(i*10+j) and isPrime(j*10+k):
                ls.append(i*100+j*10+k)
print(max(ls))

7、成绩分析

s = int(input())
good_num= 0 
pass_num= 0  
for m in range(s):
      num= int(input())
      if num >= 85:
            good_num += 1
            pass_num += 1
      elif num >= 60:
            pass_num += 1
print('{}%'.format(round(pass_num/s*100)))
print('{}%'.format(round(good_num/s*100)))

8、单词分析 

a=str(input())
b=[]
for i in a:
    s=a.count(i)
    b.append(s)
    t=max(b)
for x in range(len(a)):
    if t!=b[x]:
        continue
    else:k=a[x]
    
print(k)
print(t)
a=str(input())
dic={}
for i in range(len(a)):
    if a[i] in dic:
        dic[a[i]]=dic[a[i]]+1
    else:
        dic[a[i]]=1
key=[k for k,v in dic.items() if v==max(dic.values())]
print(''.join(key))       
print(max(dic.values()))

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值