python 输入5*5矩阵a、完成下列要求_python编程练习(五)

这篇博客通过5个Python编程练习题,涵盖了矩阵操作、导弹拦截、商队运输费计算、字符判断和最优化选择等算法问题,旨在提升读者的编程思维和算法应用能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:喷水装置

长为20米,宽为2米,妈妈要他给草坪浇水,在草坪上放置半径为Ri的喷水装置,输入第一个数字为喷水装置的个数n,后面n个数字分别为n个喷水装置的半径r,r表示该喷水装置能覆盖的圆的半径【5 | 2 3.2 4 4.5 6】。

arrin = map(float,raw_input().split())

n = int(arrin[0])

arr = arrin[1:]

arr.sort(reverse=True)

l=20

count,i = 0,0

while iand l>0:

if l<=0:

pass

if arr[i]>=2**0.5:

count+=1

l=l-2*(arr[i]**2-1)**0.5

i+=1

else:

count+=2

r = max(arr[i],arr[i+1])

l=l-2*(r**2-1)**0.5

i+=2

print count

二:拦截导弹

虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度,输出最多能拦截的导弹数目。

# 389 207 155 300 299 170 158 65

# 1 2 3 2 3 4 5 6

N=int(raw_input())

for _ in range(N):

m=int(raw_input())

arr=map(int,raw_input().split())

res=[1]*m

for i in range(1,m): # 对于每一个数,把后面所有的书都更新一次

for j in range(i):

if arr[i]1)

print max(res)

三:商队运输费

在运输过程中G商队发现,如果不在某个城市停下来休整,在连续行进过程中,他们所花的运输费与他们已走过的距离有关,在走第x千米到第x+1千米这一千米中(x是整数),他们花费的运输费是x+10这么多。也就是说走1千米花费11,走2千米要花费23。

# 构造一个矩阵图

def cal(n):

if n == 0:

return 0

else:

return cal(n-1)+10+n

n = int(raw_input())

l = []

for i in range(n-1):

p,q,d = map(int,raw_input().split())

l.append([p,q,d])

v = [[9999 for _ in range(n+1) ] for j in range(n+1)]

for i in range(1,n+1):

v[i][i] = 0

for item in l:

v[item[1]][item[0]] = item[2]

v[item[0]][item[1]] = item[2]

for k in range(1,n+1):

for i in range(1,n+1):

for i in range(1,n+1):

if (v[i][j]>v[i][k]+v[k][j]): # 在走距离最近的方法中找到可能运输费最贵的方法

v[i][j] = v[i][k]+v[k][j]

# 第一步

max = 0

for i in range(1,n+1):

for j in range(1,n+1):

if v[i][j]!=9999:

res = v[i][j]

if res> max:

max = res

# 第二步

print cal(max)

# 结果----------------------------------

"""

5 # 输入的第一行包含一个整数n,表示包括首都在内的王国的城市数

1 2 2 # 城市从1开始依次编号,1号城市为首都。

1 3 1 # 每行三个整数Pi, Qi, Di,表示城市Pi和城市Qi之间有一条高速路,长度为Di千米。

2 4 5

2 5 4

# 第一步

[[9999, 9999, 9999, 9999, 9999, 9999],

[9999, 0, 2, 1, 9999, 6],

[9999, 2, 0, 9999, 5, 4],

[9999, 1, 9999, 0, 9999, 9999],

[9999, 9999, 5, 9999, 0, 9],

[9999, 9999, 4, 9999, 9999, 0]]

# 第二步

[[9999, 9999, 9999, 9999, 9999, 9999],

[9999, 0, 2, 1, 9999, 6],

[9999, 2, 0, 9999, 5, 4],

[9999, 1, 9999, 0, 9999, 9999],

[9999, 9999, 5, 9999, 0, 9],

[9999, 9999, 4, 9999, 9999, 0]]

"""

四:字符判断

判断字符串b的所有字符是否都在字符串a中出现过,a、b都是可能包含汉字的字符串。b中重复出现的汉字,那么a中也要至少重复相同的次数。汉字使用gbk编码(简单的说,用两个字节表示一个汉字,高字节最高位为1的代表汉字,低字节最高位可以不为1)。

a=list(raw_input())

b=list(raw_input())

b1=set(b)

def dels(a,b,b1):

for i in b1:

if a.count(i)return False

return True

if dels(a,b,b1):

print 1

else:

print 0

五:将功赎过

这个数字的十进制范围是l~r,且这个数的二进制表示中恰有m个1【比如1 4 2】,最坏情况下,要试多少次得到这个数字。

l,r,m=map(int,raw_input().split())

res=0

for i in range(l,r+1):

if m == bin(i).count('1'):

res +=1

if res>0:

print res

else:

print '-1'

六:超市购物

超市内有n件物品,第i(1<=i<=n)件物品的价值为ai,但是他能拿的物品的价值总和不能超过V。贪心的小易希望能拿尽量多数量的物品,那么请你帮他计算下他最多能拿到多少件物品?

# 这种题目碰到n,V=100000,500000;arr里面的值都是2,这种情况占用所有内存

# while比for循环更占内存?

# while True:

# n,V=map(int,raw_input().split())

# arr=map(int,raw_input().split())

# arr.sort()

# num,allsum=0,0

# while allsum<=V:

# allsum+=arr[num]

# num+=1

# print num-1

while True:

n,V=map(int,raw_input().split())

arr=map(int,raw_input().split())

arr.sort()

num,allsum=0,0

for i in range(n):

if allsum+arr[i]1

print num

首先,我们需要理解图像绕原点旋转的过程。对于一个2x2灰度图像,每个像素由四个数值表示,例如(0, 0), (0, 1), (1, 0), 和 (1, 1),分别对应左上、左下、右上和右下角的像素值。旋转60度实际上是通过矩阵变换来完成的,这里我们使用旋转变换矩阵: 对于顺时针旋转60度,矩阵会是这样的: \[ \begin{bmatrix} \cos(60^\circ) & -\sin(60^\circ) \\ \sin(60^\circ) & \cos(60^\circ) \end{bmatrix} = \frac{1}{2}\begin{bmatrix} 1 & -\sqrt{3} \\ \sqrt{3} & 1 \end{bmatrix} \] 这个矩阵乘以原始像素的坐标(x, y),然后四舍入到一位小数,再取整得到新的像素位置。然后我们可以依次计算每个像素的新位置,并将其对应的灰度值应用到新图像上。 然而,由于这是一个文字描述,无法直接展示图像变化过程。你可以手动计算每行每列的像素值,或者用编程语言如Python的PIL库或numpy处理这种变换。以下是Python代码示例(假设输入图像是一个列表的列表): ```python import numpy as np # 原始2x2灰度图像 original_image = [[0, 0], [0, 1]] # 旋转矩阵 rotation_matrix = np.array([[1/2, -np.sqrt(3)/2], [np.sqrt(3)/2, 1/2]]) # 计算并转换像素 rotated_image = np.dot(rotation_matrix, np.array(original_image).T).T.round().astype(int) # 四舍入并取整 rotated_image = rotated_image.astype(np.int) # 输出旋转后的2x2图像 rotated_image.tolist() ``` 运行上述代码,你会得到旋转后的新图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值