1 条题解

  • 0
    @ 2025-8-24 21:07:22

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar love_tide
    互关

    搬运于2025-08-24 21:07:21,当前版本为作者最后更新于2021-07-19 08:17:29,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    分析

    • 因为涉及到求平均值,所以需要用到小数,保险点用 double。

    • floor 函数用于向下取整,与四舍五入不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个整数值。例如:3.8向下取整为3,当然也可以用 round 函数,即四舍五入。

    • 注意边界的控制,因为要求四周最外侧的值不变。

    其他请看代码注释。

    代码

    #include<bits/stdc++.h> 
    
    using namespace std;
    
    int n,m;
    
    double a[101][101],b[101][101];
    
    int floorb(int i,int j)
    {
    
    	 return floor((a[i+1][j]+a[i-1][j]+a[i][j-1]+a[i][j+1]+a[i][j])*1.0/5+0.5);
    //floor函数向下取整	
    //我把它写到一个函数里好看一点,* 1.0 / 5 等价于 * 0.2 也可以替换成 / 5.0 。 
    // floor(x+0.5) 就相当于 round  (x)
    }
    
    int main()
    {	
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			cin>>a[i][j];
    			b[i][j]=a[i][j];//把数据存到b数组里
    		}
    	}
    	for(int i=2;i<n;i++)
    	{
    		for(int j=2;j<m;j++)
    		{
    			b[i][j]=floorb(i,j);	//floorb封装成函数	
    		}
    	}
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			cout<<b[i][j]<<" ";//注意输出格式
    		}	
    		printf("\n");//换行 	
    	}
    	
    	return 0;
    	
    }
    
    • 1

    信息

    ID
    6965
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者