首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

想知道个简略点的方法

2012-08-09 
想知道个简单点的方法题目是这样的,2维数组a{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}

想知道个简单点的方法
题目是这样的,2维数组a{1,2,3,4,5},
  {6,7,8,9,10},
  {11,12,13,14,15},
  {16,17,18,19,20},
  {21,22,23,24,25}
要求2维数组b中存放的数为对应的a的相邻元素中按从小到大排序中的中间值;
如:b[0][0] 的值为 a[0][0]的相邻元素{2,6,7}中的中间值6,中间值的取法为元素个数k/2
  b[1][1] 的值为 a[1][1]的相邻元素{1,2,3,6,8,11,12,13}的中间值8;
   
  要求编程求出数组b(a数组可变)?
  下面是我编的,感觉太烦了,想要知道怎么编个简单点的。
[code=C/C++][/code]
#include<stdio.h>
   
int cr(int s[],int *top,int x)
{
  int n,i,j;
  n = *top;
  if(n > 10)
  {
  printf("error\n");
  return (1);
  }
  for(i=0;i<n;i++)
  if(s[i] > x)
{
for(j=n;j>i;j--)
s[j] = s[j-1];
  s[j] = x;
  *top = ++n;
  return (1);
  }
  s[n] = x;
  *top = ++n;
  return(1);
}
   
int main(void)
{
int a[5][5]={{1,2,3,4,5},
  {6,7,8,9,10},
  {11,12,13,14,15},
  {16,17,18,19,20},
  {21,22,23,24,25}};
  int b[5][5],c[10]= {0};
  int i,j,k=0,i1,j1,i2,j2,l;
  for(i=0;i<5;i++)
for(j=0;j<5;j++)
  {
for(i2=0,i1 = i-1; i2<3; i2++,i1++)
for(j2=0,j1=j-1;j2<3;j2++,j1++)
  {
if((i1>=0) && (i1<5) && (j1>=0) && (j1<5) )
if( !( (i1 == i) && (j1 == j) ) )
cr(c,&k,a[i1][j1]);
  }
k = k/2;
  b[i][j] = c[k];
  for(l=0;l<10;l++)
c[l] = 0;
  k = 0;
  }
  for(i=0;i<5;i++)
  {
for(j=0;j<5;j++)
printf("%d ",b[i][j]);
  printf("\n");
}
  return (1);
}
   


[解决办法]

C/C++ code
#include <stdio.h>int value(int s[][5],int x,int y){    int i,j=0,k,b;    int r[9];    for(i=0;i<9;i++)            if((i/3-1+x)>=0 && (i/3-1+x<5) && (i%3-1+y>=0) &&(i%3-1+y<5) && i!=4)   //取相邻数据形成数组            r[j++]=s[i/3-1+x][i%3-1+y];                    for(i=0;i<j;i++)       //排序        for(k=i;k<j;k++)            if(r[i]>r[k])            {                b=r[i];                r[i]=r[k];                r[k]=b;            }    return r[j/2];       //结果}main(){    int a[5][5]={{1,2,3,4,5},                 {6,7,8,9,10},                 {11,12,13,14,15},                 {16,17,18,19,20},                 {21,22,23,24,25}};    int b[5][5];    int i,j;    for(i=0;i<5;i++)        for(j=0;j<5;j++)            b[i][j]=value(a,i,j);        for(i=0;i<5;i++)    {        for(j=0;j<5;j++)            printf("%2d ",b[i][j]);        printf("\n");    }    system("pause");} 

热点排行