news 2026/5/1 9:58:30

华为OD机试双机位C卷 - 图像坏点矫正 (C++ Python JAVA JS GO)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD机试双机位C卷 - 图像坏点矫正 (C++ Python JAVA JS GO)

图像坏点矫正

2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型

华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解

题目描述

在图像处理中,坏点(异常值)会影响后续分析,需进行矫正。本题要求对3x3矩阵的中心元素进行坏点检测与矫正,规则如下

  1. 坏点判断依据:计算中心元素(位置1,1)与周围8个元素的均值的差值绝对值 diff = |中心元素 - 周围均值|。
  2. 矫正规则:
    • 若diff>50:用周围均值(周围8个元素的平均值,四舍五入取整数)替代中心元素
    • 若30<=diff<=50:用3x3矩阵的整体均值(9个元素的平均取整数值,四舍五入取整数)替代中心元素;
    • 若diff<30:中心元素不变。
  3. 输出:矫正后的3x3矩阵(每行元素用空格分隔)。

输入描述

输入共3行,每行3个整数(取值范围0-255),表示3x3矩阵(每行元素用空格分隔)。

输出描述

输出共3行,表示矫正后的3x3矩阵(每行元素用空格分隔)

用例1

输入

10 10 10 10 200 10 10 10 10

输出

10 10 10 10 10 10 10 10 10

题解

思路:模拟

  1. 这道题根据题目很简单,首先使用sum对另8个数字的和,然后四舍五入计算8个元素的均值average,然后计算diff = |mid - average|
  2. 然后根据diff的值进行处理
    1. 如果diff > 50: 将mid = average
    2. 如果30<=diff<=50: 进行sum += mid, 然后计算round(sum/9)替换mid
  3. 输出结果。

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> using namespace std; int main() { vector<vector<int>> grid(3, vector<int>(3)); int sum = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { cin >> grid[i][j]; // 计算其它八个值和 if (i == 1 && j == 1) { continue; } sum += grid[i][j]; } } // 四舍五入 int average = (int)round(1.0 * sum / 8); int mid = grid[1][1]; int diff = abs(mid - average); if (diff > 50) { grid[1][1] = average; // 九个元素取整数 } else if (30 <= diff && diff <= 50) { sum += grid[1][1]; // 只取整数 grid[1][1] = (int)round(1.0 * sum / 9) ; } // 输出结果 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (j != 0) { cout << " "; } cout << grid[i][j]; } cout << endl; } return 0; }

JAVA

import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); int[][] grid = new int[3][3]; int sum = 0; // 读取 3x3 矩阵 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { grid[i][j] = sc.nextInt(); // 计算其它八个值和(跳过中心点) if (i == 1 && j == 1) { continue; } sum += grid[i][j]; } } // 周围 8 个元素均值,四舍五入 int average = (int) Math.round(sum * 1.0 / 8); int mid = grid[1][1]; int diff = Math.abs(mid - average); if (diff > 50) { grid[1][1] = average; } // 30 <= diff <= 50 else if (diff >= 30 && diff <= 50) { sum += grid[1][1]; // 9 个元素整体均值,四舍五入取整 grid[1][1] = (int) Math.round(sum * 1.0 / 9); } // 输出结果 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (j > 0) System.out.print(" "); System.out.print(grid[i][j]); } System.out.println(); } } }

Python

importsysimportmath# Python 中手写四舍五入(与 C++ round 行为一致)defround_half_up(x):returnint(math.floor(x+0.5))# 读取 3x3 矩阵grid=[]sum_val=0foriinrange(3):row=list(map(int,sys.stdin.readline().split()))grid.append(row)forjinrange(3):# 计算其它八个值和(跳过中心点)ifi==1andj==1:continuesum_val+=row[j]# 周围 8 个元素均值,四舍五入average=round_half_up(sum_val/8)mid=grid[1][1]diff=abs(mid-average)ifdiff>50:grid[1][1]=averageelif30<=diff<=50:sum_val+=grid[1][1]# 9 个元素整体均值,四舍五入grid[1][1]=round_half_up(sum_val/9)# 输出结果foriinrange(3):print(" ".join(map(str,grid[i])))

JavaScript

// 使用 readline 接收标准输入(ACM 模式)constreadline=require("readline");constrl=readline.createInterface({input:process.stdin,output:process.stdout});letlines=[];// 读取所有输入行rl.on("line",(line)=>{if(line!==null&&line.trim().length>0){lines.push(line.trim());}});// 输入结束后处理rl.on("close",()=>{letidx=0;// 3x3 矩阵letgrid=Array.from({length:3},()=>Array(3).fill(0));letsum=0;// 读取 3 行,每行 3 个整数for(leti=0;i<3;i++){letrow=lines[idx++].split(/\s+/).map(Number);for(letj=0;j<3;j++){grid[i][j]=row[j];// 计算其它八个值和(跳过中心点)if(i===1&&j===1){continue;}sum+=grid[i][j];}}// 周围 8 个元素均值,四舍五入letaverage=Math.round(sum/8);letmid=grid[1][1];letdiff=Math.abs(mid-average);if(diff>50){grid[1][1]=average;}// 30 <= diff <= 50elseif(diff>=30&&diff<=50){sum+=grid[1][1];// 9 个元素整体均值,四舍五入grid[1][1]=Math.round(sum/9);}// 输出结果for(leti=0;i<3;i++){console.log(grid[i].join(" "));}});

Go

packagemainimport("bufio""fmt""math""os")funcmain(){in:=bufio.NewReader(os.Stdin)grid:=make([][]int,3)fori:=0;i<3;i++{grid[i]=make([]int,3)}sum:=0// 读取 3x3 矩阵fori:=0;i<3;i++{forj:=0;j<3;j++{fmt.Fscan(in,&grid[i][j])// 计算其它八个值和(跳过中心点)ifi==1&&j==1{continue}sum+=grid[i][j]}}// 周围 8 个元素均值,四舍五入average:=int(math.Round(float64(sum)/8))mid:=grid[1][1]diff:=int(math.Abs(float64(mid-average)))ifdiff>50{grid[1][1]=average}elseifdiff>=30&&diff<=50{sum+=grid[1][1]// 9 个元素整体均值,四舍五入grid[1][1]=int(math.Round(float64(sum)/9))}// 输出结果fori:=0;i<3;i++{forj:=0;j<3;j++{ifj>0{fmt.Print(" ")}fmt.Print(grid[i][j])}fmt.Println()}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 23:49:42

Packet Tracer静态路由配置深度剖析

掌握网络“交通指挥权”&#xff1a;Packet Tracer中静态路由的实战精要你有没有遇到过这样的情况&#xff1a;两台PC明明都配置了IP地址&#xff0c;也连在各自的路由器上&#xff0c;可就是ping不通&#xff1f;数据包像断了线的风筝&#xff0c;消失在网络拓扑图的某个角落。…

作者头像 李华
网站建设 2026/4/23 22:10:51

Anthropic关于智能体的经验分享:如何构建高效的Agent?

这篇文章分享了Anthropic在与客户合作和自建智能体过程中积累的经验&#xff0c; 为开发者提供构建有效智能体的实用建议。 什么是智能体&#xff1f; "智能体"这个词有很多种定义。有些人把它定义为完全自主的系统&#xff0c;能够长时间独立运行&#xff0c;使用各…

作者头像 李华
网站建设 2026/5/1 5:04:58

【必收藏】从零搭建AI智能体:三大低代码平台(Dify/n8n/Coze)实战指南

本文系统解析AI智能体低代码平台的核心价值与三大主流工具(Dify/n8n/Coze)的特性和优劣。Dify适合企业级应用&#xff0c;n8n擅长业务流程自动化&#xff0c;Coze则对零代码用户友好。文章详细对比了各平台的技术门槛、开发效率、扩展能力和部署要求&#xff0c;并提供基于不同…

作者头像 李华
网站建设 2026/5/1 5:06:27

基于数据挖掘的疾病数据可视化与预测系统开题报告

山东中医药大学本科生毕业论文&#xff08;设计&#xff09;开题报告毕业论文&#xff08;设计&#xff09;题目&#xff1a; 学 院&#xff1a;智能信息与工程学院专 业&#xff1a; 班 级&#xff1a; 学 号&#xff1a;学生姓名&#xff1a; 指导教师&#xff1…

作者头像 李华
网站建设 2026/5/1 5:01:39

Linux进程排查实战:strace和lsof救命指南

服务起不来&#xff0c;日志没报错。进程在跑&#xff0c;但就是不干活。 这种问题最恶心&#xff0c;看日志看不出问题&#xff0c;看监控也没异常。 这时候就需要strace和lsof这两个神器了。 strace&#xff1a;跟踪系统调用 strace能看到进程在做什么系统调用&#xff0c;相…

作者头像 李华
网站建设 2026/5/1 6:08:44

二手车线上交易小程序源码系统,全流程闭环管理的小程序源码系统

温馨提示&#xff1a;文末有资源获取方式面向团队作战的流程化管理引擎&#xff1a;本系统设计超越了单一的车辆展示&#xff0c;深度融合了内部协同办公理念&#xff0c;为拥有市场、销售、库存管理等不同岗位的二手车团队&#xff0c;打造了一个从线索获取到成交分析的全流程…

作者头像 李华