当前位置: 代码迷 >> C语言 >> 请高手指教?
  详细解决方案

请高手指教?

热度:279   发布时间:2005-09-05 12:34:00.0
请高手指教?
有这样一道题:
将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。
注:只将最小的或最大的数交换到4个距阵的角上和距阵的中心,距阵的其它元素保留不变。

我想了好久也没有一个好的算法,希望你们给我指点指点思路,在此表示非常的感谢!
搜索更多相关的解决方案: 指教  

----------------解决方案--------------------------------------------------------

#include<stdlib.h> #include<stdio.h> #define N 5 main() { int a[N][N],*p; void change(int *p); printf("source array:\n"); randomize(); for(p=*a;p<*a+N*N;p++) { if((p-*a)%N==0)printf("\n"); printf("%4d",*p=rand()%100); } p=&a[0][0]; change(p); printf("\nnow array: \n"); for(p=*a;p<*a+N*N;p++) { if((p-*a)%N==0)printf("\n"); printf("%4d",*p); } getch(); }

void change(int *p) { int i,j,temp; int *pmax,*pmin; pmax=p; pmin=p; for(i=0;i<N;i++) for(j=0;j<N;j++) { if(*pmax<*(p+N*i+j)) pmax=p+N*i+j; if(*pmin>*(p+N*i+j)) pmin=p+N*i+j; } temp=*(p+12);*(p+12)=*pmax;*pmax=temp; temp=*p;*p=*pmin;*pmin=temp; pmin=p+1; for(i=0;i<N;i++) for(j=0;j<N;j++) if(((p+N*i+j)!=p)&&(*pmin>*(p+N*i+j))) pmin=p+N*i+j; temp=*pmin;*pmin=*(p+4);*(p+4)=temp; pmin=p+1; for(i=0;i<N;i++) for(j=0;j<N;j++) if(((p+N*i+j)!=(p+4))&&((p+N*i+j)!=p)&&(*pmin>*(p+N*i+j))) pmin=p+N*i+j; temp=*pmin;*pmin=*(p+20);*(p+20)=temp; pmin=p+1; for(i=0;i<N;i++) for(j=0;j<N;j++) if(((p+N*i+j)!=p)&&((p+N*i+j)!=(p+4))&&((p+N*i+j)!=(p+20))&&(*pmin>*(p+N*i+j))) pmin=p+N*i+j; temp=*pmin;*pmin=*(p+24);*(p+24)=temp; }


----------------解决方案--------------------------------------------------------
还有这个[URL=http://202.192.163.48/ranqing/shiyandaan/syno9-10.htm]http://202.192.163.48/ranqing/shiyandaan/syno9-10.htm[/URL]
----------------解决方案--------------------------------------------------------
谢谢!非常感谢!万分感谢!
----------------解决方案--------------------------------------------------------
  相关解决方案