- 《打工传说:混合型人才混合凝土》(难度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;
}