一道矩阵统计的编程题
有一个二维字符型矩阵,其中已经有两种数据:‘0’和‘F’。要求,将字符‘0’替换成周围8个‘F'的个数,并输出替换前后对比。
如:原始矩阵 替换后矩阵
0 0 f 0 f 0 1 f 4 f
0 0 0 f f 1 2 2 f f
f 0 0 0 0 f 1 1 2 2
(暂定为5列)
我自己写了一个函数,比较繁琐,应该有更简洁的办法。
请大家帮我想想。
在VC6.0中编译通过。
void statmap(char Arr[],int row,int col)
{
int i,j;
int count;
for (i=0;i<row;i++)
for (j=0;j<col;j++)
{
if ('f'!=Arr) //判断字符是否为零
{
count=0;
if((0<i&&i<row-1) &&(0<j&&j<col-1))//判断不在特殊位置
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
//判断在特殊位置
else if (i==0)//判断在第一行
{
if (0<j&&j<col-1)//判断不是在两头
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
else
{
if(j==0)//判断是在点(0,0)
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
else// 点(0,col-1)
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
}
}
else if (i==row-1)//判断在最后一行
{
if (0<j&&j<col-1)
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
else
{
if(j==0) //点(row-1,0)
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
else//点(row-1,col-1)
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
}
}
else if (j==0&&0<i&&i<row-1)//判断在第一列的中间部分
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
else if (j==col-1&&0<i&&i<row-1)
{
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
if('f'==Arr) count++;
}
Arr=count+'0';
}
}
} 扫雷? 不错哈 ```````` 竟然没有人去优化我的算法 我觉得是不是可以倒过来遍历
判定一个元素是不是f
是f的话周围非f元素+1
另外遍历的时候外边一圈是不是可以考虑分开来写
里面的循环从第二行第二列开始
唔。。不知道这样能不能稍微简化些。。
页:
[1]