51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 719|回复: 3
打印 上一主题 下一主题

一道矩阵统计的编程题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-9-8 21:06:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一个二维字符型矩阵,其中已经有两种数据:‘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[][5],int row,int col)
{
        int i,j;
        int count;
        for (i=0;i<row;i++)
                for (j=0;j<col;j++)
               
                {
                        if ('f'!=Arr[j])        //判断字符是否为零
                        {
                                count=0;
                                if((0<i&&i<row-1) &&(0<j&&j<col-1))//判断不在特殊位置
                                {
                                        if('f'==Arr[i-1][j-1])        count++;                                       
                                        if('f'==Arr[i-1][j])        count++;
                                        if('f'==Arr[i-1][j+1])        count++;
                                        if('f'==Arr[j-1])        count++;

                                        if('f'==Arr[j+1])        count++;
                                        if('f'==Arr[i+1][j-1])        count++;
                                        if('f'==Arr[i+1][j])        count++;
                                        if('f'==Arr[i+1][j+1])        count++;
                                }
                                //判断在特殊位置
                                else if (i==0)//判断在第一行
                                {
                                        if (0<j&&j<col-1)//判断不是在两头
                                        {
                                                if('f'==Arr[j-1])        count++;
                                                if('f'==Arr[j+1])        count++;
                                                if('f'==Arr[i+1][j-1])        count++;
                                                if('f'==Arr[i+1][j])        count++;
                                                if('f'==Arr[i+1][j+1])        count++;
                                        }
                                        else
                                        {       
                                                if(j==0)//判断是在点(0,0)
                                                {
                                                        if('f'==Arr[j+1])        count++;                                                       
                                                        if('f'==Arr[i+1][j])        count++;
                                                        if('f'==Arr[i+1][j+1])        count++;
                                                }
                                                else// 点(0,col-1)
                                                {
                                                        if('f'==Arr[j-1])        count++;                                                       
                                                        if('f'==Arr[i+1][j-1])        count++;
                                                        if('f'==Arr[i+1][j])        count++;
                                                       
                                                }
                                        }
                                }
                                else if (i==row-1)//判断在最后一行
                                {
                                        if (0<j&&j<col-1)
                                        {
                                                if('f'==Arr[i-1][j-1])        count++;
                                                if('f'==Arr[i-1][j])        count++;
                                                if('f'==Arr[i-1][j+1])        count++;
                                                if('f'==Arr[j-1])        count++;
                                                if('f'==Arr[j+1])        count++;       
                                        }
                                        else
                                        {
                                                if(j==0) //点(row-1,0)
                                                {       
                                                        if('f'==Arr[i-1][j])        count++;
                                                        if('f'==Arr[i-1][j+1])        count++;                                                       
                                                        if('f'==Arr[j+1])        count++;
                                                }
                                                else//点(row-1,col-1)
                                                {
                                                        if('f'==Arr[i-1][j-1])        count++;                                                       
                                                        if('f'==Arr[i-1][j+1])        count++;
                                                        if('f'==Arr[j-1])        count++;                                                               
                                                }
                                        }
                                }
                                else if (j==0&&0<i&&i<row-1)//判断在第一列的中间部分
                                {
                                                if('f'==Arr[i-1][j])        count++;
                                                if('f'==Arr[i-1][j+1])        count++;
                                                if('f'==Arr[j+1])        count++;
                                                if('f'==Arr[i+1][j])        count++;
                                                if('f'==Arr[i+1][j+1])        count++;
                                }
                                else if (j==col-1&&0<i&&i<row-1)
                                {
                                                if('f'==Arr[i-1][j-1])        count++;
                                                if('f'==Arr[i-1][j])        count++;
                                                if('f'==Arr[j-1])        count++;
                                                if('f'==Arr[i+1][j-1])        count++;
                                                if('f'==Arr[i+1][j])        count++;
                                }
                               
                                Arr[j]=count+'0';
                        }
                       
                       
                }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-9-8 22:42:54 | 只看该作者
扫雷? 不错哈 ````````
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-9-12 10:10:33 | 只看该作者
竟然没有人去优化我的算法
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2020-8-11 08:18
  • 签到天数: 114 天

    连续签到: 1 天

    [LV.6]测试旅长

    4#
    发表于 2007-9-12 12:02:54 | 只看该作者
    我觉得是不是可以倒过来遍历
    判定一个元素是不是f
    是f的话周围非f元素+1
    另外遍历的时候外边一圈是不是可以考虑分开来写
    里面的循环从第二行第二列开始

    唔。。不知道这样能不能稍微简化些。。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-7 04:45 , Processed in 0.067981 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表