1. 公司的logo
输出题: 观察规律(我一般观察规律时间比较慢,所以做的时间很长,做了20分钟)
首先我们可以观察题目一共有三种不同类型的字符串
以0为例:
第一行:### ### ###
第二行:# # # #
第四行:# # # # #
第一行的规律就是每次加一个#
第二行的规律就是中间前两个#中间每次多加上一共#,后面每次多加上2个空格,第一次是5,第二次是7,规律2*n+5
第四行的规律就是前中后每次加上一个空格
最后t1,t2,t3三种字符串输出的时候,
先输出t1 ,中间输出n+1行t2,再输出t1和n+1行t2,最后输出t1
下面是非常丑陋拼接字符串的代码:
n = int(input())
s = ["### ### ###","# # # #"]
t1 = ""
for i in range(n+3):
t1 += "#"
t1 +=" "
for i in range(n+3):
t1 += "#"
t1 += " "
for i in range(n+3):
t1 += "#"
t2 = "#"
for i in range(n+1):
t2 += " "
t2 += "# #"
# 5 7
for i in range(2 * n + 5):
t2 += " "
t2 += "#"
t3 = "#"
for i in range(n+1):
t3 += " "
t3 +="# #"
for i in range(n+1):
t3 += " "
t3 += "#"
for i in range(n+3):
t3 += " "
t3 += "#"
print(t1)
for i in range(n+1):
print(t2)
print(t1)
for i in range(n+1):
print(t3)
print(t1)
2. 解封日期
利用py的datetime库,进行日期的加减
中间题目有一个没有说明的点,导致wa了一发(默认m+1天前是有新增病例的,题目没说)
贪心思路: 因为从今天开始统计到m天前,所以一旦这段时间内出现过病例,就延迟到当时的日期 + n天后,
用下方表格加以说明一下:
日期 | 2004/10/26 | 2004/10/27 | 2004/10/28 |
出现病例数 | 未知,肯定出现过 | 0 | 1 |
是否出现病例 | True | False | True |
最早解封时间 | 2004/10/30 | 2004/10/30 | 2004/11/01 |
由于题目输入是从右==> 左输入的,所以最早解封时间取决于最近出现病例的一天,加上推迟的n天
一旦出现病例后标记flag为True,后面的输入就不需要进行处理了
如果m天内都没有出现过,默认m+1天前是最近出现病例的
from datetime import datetime, timedelta
t = input()
n,m = map(int,input().split())
# 记录结果
res = ""
# 标记今天-m天前是否出现过病例
flag = False
for i in range(m):
# 字符串转换为时间
d1 = datetime.strptime(t, '%Y/%m/%d')
s = int(input())
if flag:
continue
if s != 0:
# 时间间隔 -i + n 即可
res = d1 - timedelta(days=i) + timedelta(days = n)
flag = True
if not flag:
res = d1 - timedelta(days=m) + timedelta(days = n)
print(res.strftime('%Y/%m/%d'),end="")
3. 语音设备是否正常
思路统计除了房主外的n行内,每个角色是否说过话,如果说过话,就从集合或者字典中清除该项
最后的集合或者字典内如果是空的话,就说明每个人都说过话,就输出ready
否则将集合或者字典内的元素加入到一个列表,根据字典序排序后输出
set集合版本
# 预处理工作
s = set()
t = ["Captain","Priest","Cook","Doctor","Engineer","Hunter","Gunner","Navigator"]
for i in range(len(t)):
s.add(t[i])
# 输入房主名称
owner = input()
# 移除房主名称
s.remove(owner)
n = int(input())
for i in range(n):
m = input()
# 根据:分割字符串,第一项绝对是人名
s1 = m.split(":")
# 判断是否在集合内,如果在,就移除该项
if s1[0] in s:
s.remove(s1[0])
# 如果是集合为空,则证明里面的人的设备全部正常
if len(s) == 0:
print("Ready",end="")
else:
# 处理设备不正常的,并通过字典序输出
res = []
for role in s:
res.append(role)
res.sort()
for i in range(len(res)):
if i != len(res)-1:
print(res[i])
else:
print(res[i],end="")
dict字典版本:
# 预处理工作
s = {"Captain":0,
"Priest":0,
"Cook":0,
"Doctor":0,
"Engineer":0,
"Hunter":0,
"Gunner":0,
"Navigator":0}
# 输入房主名称
owner = input()
# 移除房主名称
del s[owner]
n = int(input())
for i in range(n):
m = input()
# 根据:分割字符串,第一项绝对是人名
s1 = m.split(":")
# 判断是否在字典内,如果在,就移除该项
if s1[0] in s:
del s[s1[0]]
# 如果是字典为空,则证明里面的人的设备全部正常
if len(s) == 0:
print("Ready",end="")
else:
# 处理设备不正常的,并通过字典序输出
res = []
for role in s:
res.append(role)
res.sort()
for i in range(len(res)):
if i != len(res)-1:
print(res[i])
else:
print(res[i],end="")