2026/1/11 4:50:18
网站建设
项目流程
用阿里云搭建WordPress,新网站seo外包,网站开发朋友圈广告,郑州专业网站制作服务报价图像坏点矫正 2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录#xff5c;机考题库 算法考点详解
题目描述
在图像处理中#xff0c;坏点(异常值)会影响后续分析#xff0c;需进行…图像坏点矫正2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录机考题库 算法考点详解题目描述在图像处理中坏点(异常值)会影响后续分析需进行矫正。本题要求对3x3矩阵的中心元素进行坏点检测与矫正规则如下坏点判断依据计算中心元素位置11与周围8个元素的均值的差值绝对值 diff |中心元素 - 周围均值|。矫正规则:若diff50:用周围均值(周围8个元素的平均值,四舍五入取整数替代中心元素若30diff50:用3x3矩阵的整体均值(9个元素的平均取整数值四舍五入取整数)替代中心元素若diff30:中心元素不变。输出:矫正后的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题解思路模拟这道题根据题目很简单首先使用sum对另8个数字的和然后四舍五入计算8个元素的均值average,然后计算diff |mid - average|然后根据diff的值进行处理如果diff 50: 将mid average如果30diff50: 进行sum mid, 然后计算round(sum/9)替换mid输出结果。c#includeiostream #includevector #includestring #include utility #include sstream #includealgorithm #includecmath #includemap using namespace std; int main() { vectorvectorint grid(3, vectorint(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; }JAVAimport 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(); } } }Pythonimportsysimportmath# Python 中手写四舍五入与 C round 行为一致defround_half_up(x):returnint(math.floor(x0.5))# 读取 3x3 矩阵grid[]sum_val0foriinrange(3):rowlist(map(int,sys.stdin.readline().split()))grid.append(row)forjinrange(3):# 计算其它八个值和跳过中心点ifi1andj1:continuesum_valrow[j]# 周围 8 个元素均值四舍五入averageround_half_up(sum_val/8)midgrid[1][1]diffabs(mid-average)ifdiff50:grid[1][1]averageelif30diff50:sum_valgrid[1][1]# 9 个元素整体均值四舍五入grid[1][1]round_half_up(sum_val/9)# 输出结果foriinrange(3):print( .join(map(str,grid[i])))JavaScript// 使用 readline 接收标准输入ACM 模式constreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letlines[];// 读取所有输入行rl.on(line,(line){if(line!nullline.trim().length0){lines.push(line.trim());}});// 输入结束后处理rl.on(close,(){letidx0;// 3x3 矩阵letgridArray.from({length:3},()Array(3).fill(0));letsum0;// 读取 3 行每行 3 个整数for(leti0;i3;i){letrowlines[idx].split(/\s/).map(Number);for(letj0;j3;j){grid[i][j]row[j];// 计算其它八个值和跳过中心点if(i1j1){continue;}sumgrid[i][j];}}// 周围 8 个元素均值四舍五入letaverageMath.round(sum/8);letmidgrid[1][1];letdiffMath.abs(mid-average);if(diff50){grid[1][1]average;}// 30 diff 50elseif(diff30diff50){sumgrid[1][1];// 9 个元素整体均值四舍五入grid[1][1]Math.round(sum/9);}// 输出结果for(leti0;i3;i){console.log(grid[i].join( ));}});Gopackagemainimport(bufiofmtmathos)funcmain(){in:bufio.NewReader(os.Stdin)grid:make([][]int,3)fori:0;i3;i{grid[i]make([]int,3)}sum:0// 读取 3x3 矩阵fori:0;i3;i{forj:0;j3;j{fmt.Fscan(in,grid[i][j])// 计算其它八个值和跳过中心点ifi1j1{continue}sumgrid[i][j]}}// 周围 8 个元素均值四舍五入average:int(math.Round(float64(sum)/8))mid:grid[1][1]diff:int(math.Abs(float64(mid-average)))ifdiff50{grid[1][1]average}elseifdiff30diff50{sumgrid[1][1]// 9 个元素整体均值四舍五入grid[1][1]int(math.Round(float64(sum)/9))}// 输出结果fori:0;i3;i{forj:0;j3;j{ifj0{fmt.Print( )}fmt.Print(grid[i][j])}fmt.Println()}}