/**************************************************************
* Copyright (c) 2013, 西华师范大学计算机学院 *
* All rights reserved. *
* 作 者: 曾舜尧 *
* 完成日期:2013 年 05 月 12 日 *
* 工 具:VC6.0 *
* *
* 输入描述: *
* 问题描述:将一个5*5的矩阵中最大的元素放在中心,四个角分别放 *
* 四个最小的元素(顺序从左到右,从上到下顺序依次从小*
* 到大存放),写一个函数实现之。用main函数调用。 *
* 程序输出: *
* 问题分析:略 *
* 算法设计:略 *
**************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main()
{
void print_array5(int source[5][5]);
void adjustAry5(int source[5][5] );
int i,j;
int b[5][5]={{35,34,33,32,31},{30,29,28,27,26},{25,24,23,22,21},{20,19,18,17,16},{15,14,13,12,11}};
printf("Please input data? (Array[5][5])\n");
for( i=0;i<5;i++)
{
for(j=0;j<5;j++)
{ /*scanf("%d",&b[i][j]);*/}
}
print_array5(b);
adjustAry5(b);
print_array5(b);
printf("Press any key to exit");
getchar();
//system("exit");
return 0;
}
void adjustAry5(int source[5][5] )
{
//void print_array5(int source[5][5]);
int N=5,LOOP=4;/*N */
int *pMax,*pAry[4];/*pMax max;pAry[4] statistics 4 min numbers*/
int i,j,k,z,ibreak,zbreak,tmp;/**/
pMax=pAry[0]=&source[0][0];
for(i=0;i<N;i++)
{/* max and min data ptr*/
for(j=0;j<N;j++)
{
if(source[i][j] > *pMax)
{ /*search the maximum number*/
pMax=&source[i][j];
}
else if (source[i][j] < *pAry[0])
{/*search the minimum number */ pAry[0]=&source[i][j];}
}
}/* modify array by max data and min data*/
if(pMax==&source[0][0]){/* before replacement check pMax position,lest cover source[0][0] */
pMax=pAry[0];
}
tmp=source[0][0];source[0][0]=*pAry[0];*pAry[0]=tmp;pAry[0]=&source[0][0];/*min replace source[0][0],pArys[0]: min number*/
tmp=source[2][2];source[2][2]=*pMax;*pMax=tmp;pMax=&source[2][2];/*max replace source[2][2],pMax: max number*/
/*printf("%2d\t",*pMax);*/
for(k=1;k<LOOP;k++)
{/* from 1 to 3 */
pAry[k]=pMax;/*PAry[K] = max*/
ibreak=0;
for(i=0;i<N;i++)
{/* traversal */
for(j=0;j<N;j++)
{
if((source[i][j]<*pAry[k]) && (source[i][j] >= *pAry[k-1]))
{/* search lessthan max and more than *pAry[k-1](min) */
zbreak=0;
for(z=k-1;z>-1;z--)
{
if(pAry[z]== &source[i][j])
{/* &source[i][j]==pAry[] whether exist(appear) */
zbreak=1;
break;
}
}
if(zbreak==1) continue;
pAry[k]=&source[i][j];
if(*pAry[k]==*pAry[k-1] )
{/*optimize*/
ibreak=1;
break;
}
}
}
if(ibreak==1) break;
}/* modify array from array 1 to 3 data*/
switch(k)
{
case 1:
tmp=source[0][4];source[0][4]=*pAry[k];*pAry[k]=tmp;pAry[k]=&source[0][4];printf("The %d:\n",k+1);print_array5(source);
break;
case 2:
tmp=source[4][0];source[4][0]=*pAry[k];*pAry[k]=tmp;pAry[k]=&source[4][0];printf("The %d:\n",k+1);print_array5(source);
break;
case 3:
tmp=source[4][4];source[4][4]=*pAry[k];*pAry[k]=tmp;pAry[k]=&source[4][4];printf("The %d:\n",k+1);print_array5(source);
break;
}
}
}
void print_array5(int source[5][5])
{
int i,j;
for( i=0;i<5;i++)
{
for(j=0;j<5;j++)
{ printf("%2d ",source[i][j]);}
printf("\n");
}
printf("\n");
}
5*5的矩阵中最大的元素放在中心
最新推荐文章于 2022-07-28 14:56:08 发布