python基础知识点(蓝桥杯python科目个人复习计划72)

做些简单题

第一题:Fizz Buzz经典问题

题目描述:

给定一个整数n,从1到n按照下面的规则返回每个数。

如果这个数被3整除,则返回Fizz;

如果这个数被5整除,则返回Buzz;

如果这个数既被3整除又被5整除,则返回FizzBuzz;

如果这个数既不能被3整除又不能被5整除,则返回这个数。

n = int(input())
if n % 3 == 0:
  if n % 5 == 0:
    print("FizzBuzz")
  else:
    print("Fizz")
elif n % 5 == 0:
  print("Buzz")
else:
  print(n)

第二题:拼数

题目描述:

给定n个整数a1,a2,...你可以将它们任意排序。

现要将这n个数字连接成一排,即令相邻数字首尾相接,组成一个数。

问:这个数最大可以是多少?

输入描述:

第一行输入一个正整数n(1 <= n <= 0)

第二行输入n个正整数a1,a2,...(1 <= ai <= 10^5)

输出格式:

输出一个整数,表示答案。

n=int(input())
m=input().split()

for i in range(n-1):
  for j in range(i+1,n):
    if int(m[i]+m[j])<int(m[j]+m[i]):
      m[i],m[j]=m[j],m[i]
print(''.join(m))

第三题:蓝桥王国2

题目描述:

小明是蓝桥王国的王子,今天是他的登基之日。

在即将成为国王之前,老国王给他出了道题,他想要考验小明是否有管理国家的能力。

题目的内容如下:

蓝桥王国一共有N个建筑和M条单相道路,每条道路都连接着两个建筑,每个建筑都有自己的编号,从1到N。(其中皇宫的编号为1)从皇宫到每个建筑的最短路径是多少?

经过你的帮助,小明轻松地回答了这个问题,但是国王的考验并不仅仅这么简单,很快国王又提出了另外一个问题,他要小明回答从建筑s到建筑t的第k条短路的长度是多少?

小明此时已经失去了思考能力,作为你的好朋友,请你再次帮帮他。

输入描述;

输入第一行包括两个正整数n和m;

第2到m + 1行每行包括3个正整数u,v,w,表示u到v之间存在一条长度为w的路;

第m + 2行包含3个正整数s,t,k。

1 <= s,t <= n <= 10^3,1 <= m <= 10^5, 1 <= ui,vi <= n, 0 <= wi <= 10^5,保证s不等于t。

输出描述:

输出占一行,包含一个整数,表示s到t的第k条短路的长度,如果第k短路不存在,则输出-1。

import os
import sys

# 请在此输入您的代码
import heapq
from collections import defaultdict

# 输入
n, m = map(int, input().split())
tree_a = defaultdict(list)  # 正向图的邻接表
tree_d = defaultdict(list)  # 反向图的邻接表

# 构建图的邻接表
for _ in range(m):
    u, v, w = map(int, input().split())
    tree_a[u].append((v, w))
    tree_d[v].append((u, w))

s, t, k = map(int, input().split())  # 起始节点 s,目标节点 t,第 k 短路径

# Dijkstra 算法求出目标节点 t 到所有节点的最短距离
def dijkstra(t, tree_d):
    dis = [float('inf')] * (n + 1)
    vis = [False] * (n + 1)
    dis[t] = 0
    heap = [(0, t)]
    while heap:
        d, node = heapq.heappop(heap)
        if vis[node]:
            continue
        vis[node] = True
        dis[node] = d
        for neighbor, weight in tree_d[node]:
            if not vis[neighbor] and dis[neighbor] > d + weight:
                dis[neighbor] = d + weight
                heapq.heappush(heap, (dis[neighbor], neighbor))
    return dis

# A* 搜索算法找出第 k 短路径长度
def astar(s, t, k, dis_format, tree_a):
    pq = [(dis_format[s], s, 0)]
    count = 0
    while pq:
        f, node, h = heapq.heappop(pq)
        if node == t:
            count += 1
            if count == k:
                return h
            if count > k:
                continue
        for neighbor, weight in tree_a[node]:
            heapq.heappush(pq, (dis_format[neighbor] + h + weight, neighbor, h + weight))
    return -1

# 计算从节点t到所有节点的最短距离
dis_format = dijkstra(t, tree_d)
# 找出从节点s到节点t的第k条最短路径长度
result = astar(s, t, k, dis_format, tree_a)
print(result)

ok,今天就写到这里。下一篇继续! 

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值