四角最小矩阵

    技术2022-05-20  38

     将一个n*n的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。

     

    原矩阵

    35 34 33 32 31 30 29 28 27 26 25 22 23 19 21 20 19 18 17 16 15 14 13 12 11

     

    改变后:

    11 34 33 32 12 30 29 28 27 26 25 22 35 19 21 20 19 18 17 16 13 23 15 31 14

     

     

    // Struct_Mp3.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include<ctime> int _matrix(int n); int _tmain(int argc, _TCHAR* argv[]) { int get_dim = 0; bool right_dim = false; int finish = 0; //获取维数并检查数据 while(right_dim == false) { fflush(stdin);//清理缓存 get_dim = 0; printf("/nPlease input the Dimension of the matrix:/n"); scanf("%d",&get_dim); if(get_dim > 0 && get_dim < 20 && get_dim%2) { right_dim = true; } else { printf("/n[ WARNING! ]You input a magic number,please try it again/n"); } } //调用函数 if( _matrix(get_dim) ) { printf("sorry ,please try it again!/n"); } printf("/n/nPress any key to continue...."); getchar(); return 0; } int _matrix(int n) { int dimension = n; //维数 int * Little_ele[4]; //存放最小值地址的指针数组 int * Max_ele; //存放最大值地址的指针 int _MAX = 100; int _row; //行 int _list; //列 int **M_matrix = NULL; //魔方 int temp = 0; //一维空间申请 M_matrix = (int **)malloc( dimension * sizeof(int) ); if(M_matrix == NULL) { printf("memery request error!/n"); return 1; } //二维空间申请 for( _list= 0 ; _list < dimension ; _list++) { M_matrix[_list] = (int *)malloc( dimension * sizeof(int) ); if(M_matrix[_list] == NULL) { printf("memery request error!/n"); return 1; } } //------------------------------实现功能------------------------------ //初始化指针数组 for(int i = 0 ; i < 4 ; i++) { Little_ele[i] = &_MAX; } Max_ele = *M_matrix ; //把数组第一个值赋给Max_ele //动态数组初始化成,赋给0-100的随机数 printf("/n-----------Original matrix------------"); srand((unsigned)time(0)); //时间作为种子 for( _row = 0 ; _row < dimension ; _row++) { printf("/n"); for( _list = 0 ; _list < dimension ; _list++) { temp = rand()0; //产生随机数 M_matrix[_row][_list] = temp; //赋值 printf("%-4d",temp) ; //打印 //搭便车找最大值 if(M_matrix[_row][_list] > *Max_ele ) { Max_ele = &M_matrix[_row][_list]; } } } //更改中间值为最大值 temp = M_matrix[dimension/2][dimension/2]; M_matrix[dimension/2][dimension/2] = *Max_ele; *Max_ele = temp; //遍历 for( _row = 0 ; _row < dimension ; _row++) { for( _list = 0 ; _list < dimension ; _list++) { //找小值(相当于删除最后一个值,插入新值后排序) if(M_matrix[_row][_list] < *Little_ele[3]) { int * _temp = NULL; // int position; _temp = &M_matrix[_row][_list];// //查找位置 for(int i = 0 ; i < 4 ; i++) { if(*_temp < *Little_ele[i]) { position = i; break ; } } //对最小数组进行排序 for(int i = 3 ;i > position ;i--) { Little_ele[i] = Little_ele[i-1]; } Little_ele[position] = _temp; } } } //更改四角:顺序从左到右,从上到下顺序依次从小到大存放 for(int i = 0 ; i < 4 ; i++) { //定位 , 牛逼的三元运算符 _row = (i<2 ? 0 : (dimension-1)); _list = ((i%2) == 0 ? 0 : (dimension-1)); //换值 temp = M_matrix[_row][_list]; M_matrix[_row][_list] = *Little_ele[i]; *Little_ele[i] = temp; } //----------------------------实现功能结束---------------------------- //打印结果 printf("/n/n-----------Final matrix------------"); for( _row = 0 ; _row < dimension ; _row++ ) { printf("/n"); for( _list = 0 ; _list < dimension ; _list++ ) { printf("%-4d",M_matrix[_row][_list]) ; } } //释放内存 for( _list = 0 ; _list < dimension ; _list++) { free(M_matrix[_list]); } free(M_matrix); M_matrix = NULL; getchar(); return 0; } //逻辑错误,如果四角的值为最大值或者最小值,替换的时候会出错。 //三元运算符太牛叉了


    最新回复(0)