做些简单题
第一题: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,今天就写到这里。下一篇继续!