题目描述
一个图像有n个像素点,存储在一个长度为n的数组img里,每个像素点的取值范围[0,255]的正整数。
请你给图像每个像素点值加上一个整数k(可以是负数),得到新图newImg,使得新图newImg的所有像素平均值最接近中位值128。
请输出这个整数k。
输入描述
n个整数,中间用空格分开
输出描述
一个整数k
备注
1 <= n <= 100
如有多个整数k都满足,输出小的那个k;
新图的像素值会自动截取到[0,255]范围。当新像素值<0,其值会更改为0;当新像素值>255,其值会更改为255;
例如newImg=”-1 -2 256″,会自动更改为”0 0 255″
用例1
输入
0 0 0 0
输出
128
说明
四个像素值都为0
用例2
输入
129 130 129 130
输出
-2
说明
-1的均值128.5,-2的均值为127.5,输出较小的数-2
#最开始输入的像素点肯定在0-255之间,想要加上整数K后最接近128
#那么我们k的取值为-127~128之间,直接暴力
old_images = list(map(int,input().split()))
length = len(old_images)
minK = 255 #最小的K
mindiff= 255 #最小的差值
for k in range(-127,129):
new_sum_image = 0
for image in old_images:
#当新像素值<0,其值会更改为0;当新像素值>255,其值会更改为255;
new_sum_image+=min(max(k+image,0),255)
avg = new_sum_image/length
diff = abs(avg-128)
if diff<mindiff:
mindiff = diff
minK = k
print(minK)