读书人

想知道个简略点的方法

发布时间: 2012-08-09 15:59:22 作者: rapoo

想知道个简单点的方法
题目是这样的,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");} 

读书人网 >C语言

热点推荐