从零开始的刷题——图像模糊处理(数组问题)

 

这个题逻辑思维其实不难,就是把不靠在边上的数与它上下左右所有的数求和/5,替换掉原来的那个数,边上一圈数不变,但是如果只用一个数组的话,会导致一边运算一边输出,就比如原来在(3,3)位置的数是100,但是经过计算后变成了80,在计算他周围的数的时候,会用80来计算,但是题目要求我们还是按原来的100来计算,所以说不能单纯只用一个数组,要用两个数组来解决。

下面是代码部分

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[101][101],b[101][101];
	int m,n;
	int i,j;
	cin>>m>>n;
	for(i=1;i<=m;i++)
	{
		for(j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	for(i=1;i<=m;i++){
		for(j=1;j<=n;j++){
			if(i==1||i==m||j==1||j==n)
			b[i][j]=a[i][j];//把边上的数原封不动的存到b里面相应的位置。 

			else b[i][j]=round((a[i-1][j]+a[i+1][j]+a[i][j]+a[i][j-1]+a[i][j+1])/5.0);
			//这里要/5.0,因为要取整,如果不是5.0的话,那round(8/3)=round(2),取整了个寂寞。 

		}	 
	}
	for(i=1;i<=m;i++){
		for(j=1;j<=n;j++){
			cout<<b[i][j]<<" ";
		}
		cout<<endl;
	}
    return 0;
 } 

再加一份不用登录直接复制粘贴的:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a[101][101],b[101][101];
    int m,n;
    int i,j;
    cin>>m>>n;
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
        {
            cin>>a[i][j];
        }
    }
    for(i=1;i<=m;i++){
        for(j=1;j<=n;j++){
            if(i==1||i==m||j==1||j==n)
            b[i][j]=a[i][j];//把边上的数原封不动的存到b里面相应的位置。 

            else b[i][j]=round((a[i-1][j]+a[i+1][j]+a[i][j]+a[i][j-1]+a[i][j+1])/5.0);
            //这里要/5.0,因为要取整,如果不是5.0的话,那round(8/3)=round(2),取整了个寂寞。 

        }     
    }
    for(i=1;i<=m;i++){
        for(j=1;j<=n;j++){
            cout<<b[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值