练习题3.0.2

本文介绍了一个编程问题,涉及对建筑高度数据的处理。祺琳学长接到任务要在两年内完成m*n栋大楼建设,由于高度差异过大,需要对建筑高度进行平滑处理。处理规则是计算每栋楼与其相邻楼高度之和的平均值作为新高度。代码通过遍历和九宫格算法实现这一规则,并给出了对应的输入输出示例。
摘要由CSDN通过智能技术生成
  1. 《打工传说:混合型人才混合凝土》(难度B-)

(这个难度主要在于如何精简你的代码——不过还是考虑怎么做出来吧)

磨刀不误砍柴工,读完大学再打工,一晃来到了三年后,祺琳学长提着桶在工地上打着混泥土,西南石油大学建筑外包负责人这时候找到了他,给了他包工任务,要求在一个m*n(m和n均小于100)的土地上修建m*n栋高度互不相同的大楼,要求在两年时间内竣工。开工前的一个月中,工程师发现其中有些楼之间的高度差别太大了,很不美观,需要进行平滑处理制作新图纸,其具体的规则是新图纸每栋楼的高度为原图纸中该栋和该栋相接的楼(每个角上的也算)高度之和除以楼数(相接的楼数和本身),并取整数。请你绘制新的图纸交给祺琳学长手中

输入样例:

4  3

4  3   2   1

5  6   7   8

12  11  10  9

输出样例:

4 4 4 4

6 6 6 6

8 8 8 8

思路:就是用对应元素九宫格替换对应元素。注意m和n是列和行。

#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int around[8][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}} ;
int arr[100][100] = {};
int arr2[100][100] = {};
for(int i = 0;i<n;i++)
{
	for(int j = 0;j<m;j++)
	{
		scanf("%d",&arr[i][j]);
	}
}
for(int a = 0;a<n;a++)
{
	for(int b = 0;b<m;b++)
	{	int around_num = 1,self = arr[a][b];
	for(int k = 0;k<8;k++)
	{
		int ii = a + around[k][0];
		int jj = b + around[k][1];
		if(ii>=0&&jj>=0&&ii<n&&jj<m)
		{
			around_num = around_num + 1;
			self = self + arr[ii][jj];
		}
		
	}
		arr2[a][b] =(int)(self/around_num);
	}
}
for(int c = 0;c<n;c++)
{
	for(int d = 0;d<m;d++)
	{
		printf("%d",arr2[c][d]);
	}
}
    return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值