python题目(9.20)

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复现一下思想:

1008 数组元素循环右移问题 (20 分) - 知乎

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
考研的算法就是进行三次反转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值