蓝桥杯基础试题练习小结(vip)(一)

时间转换 字符串对比 分解质因数 矩阵乘法
摘要由CSDN通过智能技术生成

试题 基础练习 时间转换

给定一个以秒为单位的时间t,要求用“H:M:S”的格式来表示这个时间。h表示时间,m表示分钟,s表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。

t = int(input())
s = t % 60
m = (t // 60) % 60
h = (t // 3600) % 24
print("%d:%d:%d" % (h, m, s))

试题 基础练习 字符串对比

给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:   1:两个字符串长度不等。比如 Beijing 和 Hebei   2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing   3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing   4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing   编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。

a = input()
b = input()
if len(a) != len(b):
    print("1")
if a == b:
    print("2")
if a != b and a.upper() == b.upper():
    print("3")
if len(a) == len(b) and a.upper() != b.upper():
    print("4")

试题 基础练习 分解质因数

求出区间[a,b]中所有整数的质因数分解。

a,b = map(int,input().split())
for n in range(a,b+1):
    print("{}=".format(n),end='')
    while n>1:
        for i in range(2,n+1):
            if n%i==0:
                n=int(n/i)
                if n==1:
                    print(i)
                else:
                    print("{}*".format(i),end='')
                break

试题 基础练习 矩阵乘法

给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   

例如:   

A =

  1 2

  3 4   

A的2次幂

  7 10

  15 22

'''
import numpy as np
n,m = map(int,input().split())
ls = []
for i in range(n):
    ls1 = list(map(int,input().split()))
    ls.append(ls1)
arr1 = np.array(ls)
arr2 = arr1 ** m
ls = list(arr2)
for i in ls:
    for j in i:
        print(j,end=" ")
    print()
'''

def cheng(ls,v):       #两个矩阵相乘,v是ls的纵向矩阵,所以ls4为矩阵ls的二次幂,例:
    ls4 = []           #[[1,2],[3,4]] ** 2 = [[1*1+2*3,1*2+2*4],[1*3+3*4,2*3+4*4]]
    for i in ls:       #用[[1,2],[3,4]]和[[1,3],[2,4]]对应元素求值的话就很容易
        ls3 = []
        for m in v:
            sum1 = 0
            for u in range(n):
                sum1 = sum1 + i[u] * m[u]
            ls3.append(sum1)   
        ls4.append(ls3)
    return ls4

def _print(ls4):
    for i in ls4:          #输出函数
        for j in i:
            print(j,end=" ")
        print()

def mi(xx,num):        #递归利用乘法函数求m次幂,xx是要求幂的矩阵,num是次数
    q2 = cheng(xx, v)
    if num == 2:
        _print(q2)
    else:
        mi(q2, num - 1) #递归,当num=2时结束
    
    
n,m = map(int,input().split())
ls = []
for i in range(n):
    ls1 = list(map(int,input().split()))
    ls.append(ls1)
    
v = []
for j in range(n):      #求ls的纵向矩阵
    ls2 = []
    for k in ls:
        ls2.append(k[j])
    v.append(ls2)   


if m == 0:
    x = []
    for q in range(n):
        y = []
        for w in range(n):
            if not w == q:
                y.insert(w, 0)
            else:
                y.insert(w, 1)
        x.append(y)
    _print(x)
elif m == 1:
    _print(ls)
else:
    mi(ls, m)

这一题如果能用numpy的话会好求很多,可惜比赛是不能用库的,所以只能用这种麻烦的麻烦一步一步算,矩阵的n次幂其实就是n个相同的矩阵相乘,所以要写出两个矩阵相乘的函数,然后递归,两个矩阵相乘用Python的话不容易取元素,所以先把一个矩阵变为纵向的,这样矩阵相乘的话就可以把行乘以列的运算转化为行乘以行的运算,最后分三种情况调用相应函数即可得到结果。

PS:一杯茶一包烟,一段破码写一天。没有思路提示硬肝代码真的是件很痛苦的事,但若是完全借鉴别人的思路又会提升的很慢,所以痛苦归痛苦,还是自己先思考,再参照别人的思路,求同存异,这样才能保证效率并且开阔思路,而且当你看着自己肝了一下午的代码终于跑起来,真的是很有成就感的事。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怒冲汤家凤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值