/************************************************************** * 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的矩陣中最大的元素放在中心,寫一個函數實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.