蓝桥杯官网练习题(图像模糊)

题目描述

小蓝有一张黑白图像,由 n×m 个像素组成,其中从上到下共 n 行,每行从左到右 �m 列。每个像素由一个 0 到 255 之间的灰度值表示。

现在,小蓝准备对图像进行模糊操作,操作的方法为:

对于每个像素,将以它为中心 3×3 区域内的所有像素(可能是 9 个像素或少于 9 个像素)求和后除以这个范围内的像素个数(取下整),得到的值就是模糊后的结果。

请注意每个像素都要用原图中的灰度值计算求和。

输入描述

输入的第一行包含两个整数 n,m。

第 2 行到第 n+1 行每行包含 m 个整数,表示每个像素的灰度值,相邻整数之间用一个空格分隔。

其中,1≤n,m≤100 。

输出描述

输出 n 行,每行 m 个整数,相邻整数之间用空格分隔,表示模糊后的图像。

输入输出样例

示例 1

输入

3 4
0 0 0 255
0 0 255 0
0 30 255 255

输出

0 42 85 127
5 60 116 170
7 90 132 191

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M
java 复制代码
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n=scan.nextInt();
        int m=scan.nextInt();
        int[][] a=new int[n+2][m+2];
        int[][] ans=new int[n+2][m+2];
        for(int i=0;i<=n+1;i++){
            for(int j=0;j<=m+1;j++){
                a[i][j]=266;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                a[i][j]=scan.nextInt();
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                int sum=0,count=0;;
                if(a[i-1][j-1]!=266){ //1
                    sum=sum+a[i-1][j-1];
                    count++;
                }
                if(a[i-1][j]!=266){ //2
                    sum=sum+a[i-1][j];
                    count++;
                }
                if(a[i-1][j+1]!=266){ //3
                    sum=sum+a[i-1][j+1];
                    count++;
                }
                if(a[i][j-1]!=266){//4
                    sum=sum+a[i][j-1];
                    count++;
                }
                if(a[i][j]!=266){ //5
                    sum=sum+a[i][j];
                    count++;
                }
                if(a[i][j+1]!=266){ //6
                    sum=sum+a[i][j+1];
                    count++;
                }
                if(a[i+1][j-1]!=266){ //7
                    sum=sum+a[i+1][j-1];
                    count++;
                }
                if(a[i+1][j]!=266){ //8
                    sum=sum+a[i+1][j];
                    count++;
                }
                if(a[i+1][j+1]!=266){ //9
                    sum=sum+a[i+1][j+1];
                    count++;
                }
                int ans1=(int)Math.floor(sum/count);
                ans[i][j]=ans1;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                System.out.printf(ans[i][j]+" ");
            }
            System.out.println();
        }
        scan.close();
    }
}
相关推荐
ChoSeitaku28 分钟前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
Fuxiao___37 分钟前
不使用递归的决策树生成算法
算法
我爱工作&工作love我42 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
白-胖-子1 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级
workflower1 小时前
数据结构练习题和答案
数据结构·算法·链表·线性回归
好睡凯1 小时前
c++写一个死锁并且自己解锁
开发语言·c++·算法
Sunyanhui12 小时前
力扣 二叉树的直径-543
算法·leetcode·职场和发展
一个不喜欢and不会代码的码农2 小时前
力扣105:从先序和中序序列构造二叉树
数据结构·算法·leetcode
前端郭德纲2 小时前
浏览器是加载ES6模块的?
javascript·算法
SoraLuna2 小时前
「Mac玩转仓颉内测版10」PTA刷题篇1 - L1-001 Hello World
算法·macos·cangjie