E卷-(100分)简单的自动曝光

简单的自动曝光

问题描述

给定一个长度为 的整数数组 ,表示一张图像的像素值,每个像素值的范围是 的整数。现在需要给每个像素值加上一个整数 (可以是负数),得到新的图像 ,使得 中所有像素的平均值最接近中位值 128。请计算并输出这个整数

输入格式

一行 个整数,用空格分隔,表示原图像 的像素值。

输出格式

一个整数

样例输入

样例 1

0 0 0 0

样例 2

129 130 129 130

样例输出

样例 1

128

样例 2

-2

样例解释

样例 1

原图像的四个像素值都为 0,加上 128 后,新图像的所有像素值变为 128,平均值正好是 128。

样例 2

时,新图像为 128 129 128 129,平均值为 128.5。 当 时,新图像为 127 128 127 128,平均值为 127.5。 两种情况下,127.5 更接近 128,且 -2 小于 -1,所以输出 -2。

数据范围

  • 如果有多个整数 都满足条件,输出较小的那个
  • 新图像的像素值会自动截取到 范围。当新像素值 时,其值会更改为 0;当新像素值 时,其值会更改为 255。

题解

这道题目的核心是找到一个整数 ,使得加上 后的新图像像素平均值最接近 128。

解题思路如下:

  1. 读取输入的像素值数组。
  2. 遍历可能的 值范围(-128 到 128)。
  3. 对于每个 ,计算新图像的平均值。
  4. 找出使平均值最接近 128 的

关键点在于处理像素值的边界情况。当新像素值小于 0 时,要将其设为 0;大于 255 时,要将其设为 255。这可以通过 max(0, min(255, val + i)) 来实现。

  • Python
# 读取输入
v = list(map(int, input().split()))
n = len(v)

res = float('inf')  # 初始化结果为无穷大
k = 0  # 初始化 k 为 0

# 遍历可能的 k 值
for i in range(-128, 129):
    su = 0
    # 计算新图像的像素和
    for val in v:
        su += max(0, min(255, val + i))
    # 计算平均值与 128 的差距
    t = abs(su / n - 128)
    # 更新结果
    if t < res:
        res = t
        k = i

# 输出结果
print(k)
  • C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAX_N 100

int main() {
    int v[MAX_N];
    int n = 0;
    int x;

    // 读取输入
    while (scanf("%d", &x) == 1) {
        v[n++] = x;
    }

    double res = 1e9;
    int k = 0;

    // 遍历可能的 k 值
    for (int i = -128; i <= 128; i++) {
        int su = 0;
        // 计算新图像的像素和
        for (int j = 0; j < n; j++) {
            int val = v[j] + i;
            su += (val < 0) ? 0 : (val > 255) ? 255 : val;
        }
        // 计算平均值与 128 的差距
        double t = fabs((double)su / n - 128);
        // 更新结果
        if (t < res) {
            res = t;
       

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论
这道题暴力求解会不会超时www
点赞 回复 分享
发布于 2025-05-20 10:36 天津
cpp/java/python/js/c
点赞 回复 分享
发布于 2024-11-08 11:12 江苏

相关推荐

米哈游校招进主页喵:大佬 考虑我司不 考虑的话可以看我主页帖子
点赞 评论 收藏
分享
04-16 10:27
已编辑
美团_Saas_后端开发
今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,拿到美团offer那会感觉自己天都亮了。没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务