一个图像有 n 个像素点,存储在一个长度为 n 的数组 img 里,每个像素点的取值范围[0,255]的正整数。
请你给图像每个像素点值加上一个整k(可以是负数),得到新图 newlmg,使得新图 newlmg 的所有像素平均值最接近中位值 128。
请输出这个整数 k。
n 个整数,中间用空格分开。
一个整数 k。
1 <= n <= 100。
如有多个整数 k 都满足,输出小的那个 k;
新图的像素值会自动截取到[0,255]范围。当新像素值<0,其值会更改为0,当新像素值>255,其值会更改为 255:例如 newlmg=”-1 -2 256”,会自动更改为”0 0 255"
vec=input().split()
arr=[]
ave=1000
for i in vec:
arr.append(int(i))
res=0
for i in range(-127,129):
sum=0
for j in range(len(arr)):
new=arr[j]+i
if new<0:
new=0
if new >255:
new=255
sum+=new
ave_tmp=sum/len(arr)
if abs(ave-128)>abs(ave_tmp-128):
ave=ave_tmp
res=i
print(res)
0 0 0 0
128
每个加128,都为128,最接近128。哈哈~~
有的人会说,哪有这么简单的事情~~
120 122 130 150
-3
当为-2时,变为118 120 128 148,中位数是128.5。
当为-3时,变为117 119 127 147,中位数是127.5。
输出较小的数-3。
下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
本文收录于,华为OD机试(Python)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。