一本通网站1128题:图像模糊处理

根据样例来看,使用的值都是输入时候的上下左右及自身,也就是左边的数在改变之后,求右边这个数的之后,不能用左边改变之后的值,而是原本的值。所以之前的的矩阵问题可以边求变打印,但是这个不行,必须要用第二个数组来存储。因为要保证原来的数据不会改变。
#include<iostream>
using namespace std;
#include<cmath>
int main()
{int n = 0, m = 0;cin >> n >> m;//定义两个二维数组,分别存储输入时的数据和结果。int** arr1 = new int* [n];int** arr2 = new int* [n];for (int i = 0; i < n; i++){arr1[i] = new int[m];arr2[i] = new int[m];for (int j = 0; j < m; j++){cin >> arr1[i][j];//因为四周元素需要不变,可以直接让数组2完全复制数组1,后面再改变内部的数据arr2[i][j] = arr1[i][j];}}for (int i = 1; i < n - 1; i++){for (int j = 1; j < m - 1; j++){//使用库函数<cmath>里的round函数,可以进行四舍五入//因为定义的整型数组,所以要除以5.0,如果除以5的话,运算的结果会直接变成整型丢弃小数,round函数也就不能起到四舍五入的作用了。arr2[i][j] = round((arr1[i][j] + arr1[i][j - 1] + arr1[i][j + 1] + arr1[i + 1][j] + arr1[i - 1][j]) / 5.0);}}//最后打印arr2数组for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cout << arr2[i][j] << " ";}cout << endl;}
}