題目:輸入一個5x5矩陣,將其中最大的元素移到中心,4個角分別放4個最小的元素(順序從左到右,從上到下以此從小到大存放) 思路:最大值是最好找的,迴圈遍歷一次,找出最大值和其地址。然後就是找最小的那4個數字,我的思路是首先用一數組來存放二維數組的第一行,然後從第二行開始遍歷,從該數組b中最大的元素開 ...
題目:輸入一個5x5矩陣,將其中最大的元素移到中心,4個角分別放4個最小的元素(順序從左到右,從上到下以此從小到大存放)
思路:最大值是最好找的,迴圈遍歷一次,找出最大值和其地址。然後就是找最小的那4個數字,我的思路是首先用一數組來存放二維數組的第一行,然後從第二行開始遍歷,從該數組b中最大的元素開始比較,首先小於哪一個就替換掉哪一個,最後b數組中就是二維數組中最小的5個數。然後就是找到這4個數的地址,一開始我沒有加flag標記,那樣一旦二維數組中存在兩個相同的數,程式就崩潰了。意識到這一點後,我給每一個數設了一個對應的flag1,flag2等,一旦找到了一個,取這個地址後,同時設置flag為1,表示這個數已經取過地址了。最後,輸出即可。
1 #include<stdio.h> 2 int main(){ 3 void sort(int q[]); 4 int a[5][5]; 5 int b[5]; 6 int max=0,temp; 7 int flag1=0,flag2=0,flag3=0,flag4=0; 8 int *p; 9 int *p1,*p2,*p3,*p4; 10 for(int i=0;i<5;i++) 11 for(int j=0;j<5;j++) 12 scanf("%d",&a[i][j]); 13 for(int i=0;i<5;i++) 14 b[i]=a[0][i]; 15 16 for(int i=0;i<5;i++){ 17 for(int j=0;j<5;j++){ 18 if(a[i][j]>max) {max=a[i][j]; p=&a[i][j];} 19 } 20 } 21 for(int i=1;i<5;i++){ 22 for(int j=0;j<5;j++){ 23 for(int k=4;k>=0;k--){ 24 if(a[i][j]<b[k]) { 25 b[k]=a[i][j]; 26 sort(b);break; 27 } 28 } 29 } 30 } 31 for(int i=0;i<5;i++){ 32 for(int j=0;j<5;j++){ 33 if(a[i][j]==b[0]&&flag1==0) {p1=&a[i][j];flag1=1;} 34 else if(a[i][j]==b[1]&&flag2==0) {p2=&a[i][j];flag2=1;} 35 else if(a[i][j]==b[2]&&flag3==0){p3=&a[i][j];flag3=1;} 36 else if(a[i][j]==b[3]&&flag4==0) {p4=&a[i][j];flag4=1;} 37 } 38 } 39 *p=a[2][2];a[2][2]=max; 40 *p1=a[0][0];a[0][0]=b[0]; 41 *p2=a[0][4];a[0][4]=b[1]; 42 *p3=a[4][0];a[4][0]=b[2]; 43 *p4=a[4][4];a[4][4]=b[3]; 44 printf("\n \n"); 45 for(int i=0;i<5;i++){ 46 for(int j=0;j<5;j++){ 47 printf("%d ",a[i][j]); 48 } 49 printf("\n"); 50 } 51 } 52 //排序 53 void sort(int q[]){ 54 int temp1; 55 for(int i=0;i<5;i++){ 56 for(int j=i+1;j<5;j++){ 57 if(q[i]>q[j]){ 58 temp1=q[i];q[i]=q[j];q[j]=temp1; 59 } 60 } 61 } 62 }
運行結果: