欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

最笨的方法解贼简单的题

程序员文章站 2024-01-05 16:00:40
题目:输入一个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 }

运行结果:

最笨的方法解贼简单的题

 

上一篇:

下一篇: