题目:输入一个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 }

运行结果:

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!