Chinaunix首页 | 论坛 | 博客
  • 博客访问: 803931
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4136
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-21 00:52
个人简介

余自庚寅年麦月误入Linux领域,先从事文件系统与IO之技,后及性能基准之术,上诸述之领域,吾虽有知晓,然未能精通,实为憾事!

文章存档

2016年(8)

2014年(9)

2013年(14)

分类: C/C++

2013-09-01 22:06:23

        之前去过杭州信雅达面试,有一个C上机编程题:
        二维数组
        a[5][5]={44,33,67,42,37,23,21,38,45,3,2,3,4,65,45,4,3,4,4,77,42,34,66,8,45}
        给出另一个二维数组b,用a中的元素填充b。并把b数组打印出来。
        条件:b[i][j]等于a[i][j]周围的全部元素按升序排列以后中间的那个数。例如a[0][0]周围有三个元素33,21,23升序21,23,33此时b[0][0]=23,中间值为Index=len/2。

我的想法是,将a[i][j]周围的全部元素先保存到一个一位数组中,然后对这个一位数组排序,一位数组的排序中间值就是b[i][j]。很惭愧,编码目前还不是我的强项,可能下面的代码水平太烂,还有优化的空间,请各位看官赐教。

#include

int main(void)
{
    int a[5][5]={44,33,67,42,37,23,21,38,45,3,2,3,4,65,45,4,3,4,4,77,42,34,66,8,45};
    int b[5][5]={0}; /*最终输出数组*/
    int c[8]={0}; /*存放每个元素周围的元素*/
    int m,n,i,j;
    int len;   /*c[8]的实际长度*/
    int temp=0;

    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {  
            /* 二维数组a附近包围的几个(3个、5个或8个)元素提取出来存到c数组中 */
            len=0;
            for(m=i-1;m<=i+1;m++)
            {   if((m<0)||(m>4))
                    continue;
                for(n=j-1;n<=j+1;n++)
                {
                    if((n<0)||(n>4))
                       continue;
                    if((m==i)&&(n==j))
                    {
                        continue;
                    }
                    else
                    {   if((m>=0)&&(m<=4)&&(n>=0)&&(n<=4))
                        {
                            c[len]=a[m][n];
                            len++;
                        }
                    }
                }
            }

            /*冒泡排序(升序)数组*/
            for(m=0;m             {
                for(n=0;n                 {  
                    if(c[n]>c[n+1])
                    {
                        temp=c[n];
                        c[n]=c[n+1];
                        c[n+1]=temp;
                    }
                }
            }
            b[i][j]=c[len/2];
        }
    }

   /* 打印二维数组b */
    m=0;
    for(i=0;i<=4;i++)
    {
        for(j=0;j<=4;j++)
        {
            m++;
            printf("%2d ",b[i][j]);
            if((m%5)==0) printf("\n");
        }
    }
    return 0;
}
阅读(5074) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~