1026 程序运行时间
CLK_TCK = 100
C1,C2 = map(int,input().split())
t = round((C2-C1)/CLK_TCK)
t1 = t//(60*60)
t2 =(t-t1*60*60)//60
t3 = t-t1*60*60-t2*60
# print(f"{t1:0>2}:{t2:0>2}:{t3:0>2}")
print(f"{t1:02d}:{t2:02d}:{t3:02d}")
(试了两种输出方式)
要点:1.round函数四舍五入
2.f-string格式化字符串“:”后面写格式
虽然f格式很方便,但是也要注意一些特殊的输出。比如打印双括号,字典等。
正确使用Python f-string格式化字符串的7个层级 - 知乎
1046 划拳
import sys
N = eval(input())
n1 = n2 = 0
for i in range(N):
num = list(map(int,sys.stdin.readline().split()))
result = num[0]+num[2]
if((num[1] == result) and (num[3] == result)):
continue
elif(num[1] == result):
n2 += 1
elif(num[3] == result):
n1 += 1
print(n1,n2)
注意同输同赢情况
【Python入门教程】第57篇 循环进阶之模拟do…while语句_不剪发的Tony老师的博客-CSDN博客_python的do while循环
1008 数组元素循环右移问题
一开始的想法是,从第一个元素开始循环后移,后移位置的元素用中间值记录下来,再从此位置后移,直到回到原点,这样就只用开辟一个空间。但是对题目给出的测试用例就不能通过,因为跳步为2时,单数元素不会被循环到。
最后看了几个帖子,用python复现一下思想:
1.循环右移n就是把末尾的n个元素移到头
(1)插入法,一次一个,边界情况不用太考虑
N,M = map(int,input().split())
A = input().split()
# 不转换成int数组,为了输出更方便
num = 0
while num<M:
A.insert(0,A[N-1])
del A[N]
# 注意这里插入一个元素后数组变长
num += 1
print(' '.join(A))
(2)分段下标法
N,M = map(int,input().split())
A = input().split()
if (M==0 or M == N):
print(' '.join(A))
elif (N==1):
print(A[0])
else:
print(' '.join(A[-M:]),end=" ")
print(' '.join(A[:-M]))
一开始没有考虑移动为0,和数组为1的边界情况,提交通过了两个测试点,加上条件判断后,通过三个测试点。
还是参考别人的博客找错误:
1008 数组元素循环右移问题_the_singular的博客-CSDN博客_数组元素循环右移问题
发现M>N的情况没有考虑,修改代码,加M%=N,终于通过了!同时M经过取余操作,以上的判断条件也可以拿掉了
N,M = map(int,input().split())
M %= N
A = input().split()
if (M==0):
print(' '.join(A))
else:
print(' '.join(A[-M:]),end=" ")
print(' '.join(A[:-M]))
一开始用下标法还想着可以免去多次移动,但是却忘记了取余操作。所以涉及循环移动不管用什么方法都不要忘记取余。
在看上一个帖子的时候又看到了递归方法,
N,M = map(int,input().split())
M %= N
A = input().split()
if M==0:
print(' '.join(A))
else:
A = A[::-1]
A[0:M] = A[M-1::-1]
A[M:N] = A[N-1:M-1:-1]
print(' '.join(A))
注意切片
其他反转数组方法:
https://blog.csdn.net/weixin_39866963/article/details/110968864
考研的算法就是进行三次反转