zoukankan      html  css  js  c++  java
  • 将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用

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

    解题思路: 将二维数组当做一维数组进行处理比较方便,而二维数组本身就是扁平化存储,所以直接使用首地址即可。

    先遍历找到最大值,将其与中间数字交换,而中间数字的下标就是数字总数除以2;

    其次寻找四次最小值,每次寻找的时候将最小值的下标记录起来,前提是这个数字如果已经是选中的最小数字之一,则需要跳过,也就是只跟剩余的数字作比较。(第二次开始遍历找最小数字的时候,千万不能与第一个最小数进行比较,否则永远都只有一个最小数)。

    答案:

    #include <stdio.h>
    #include <string.h>
    void transform(int *arry, int col_row)
    {
        //找到最大值
    	int max = arry[0], max_idx;
    	for (int i = 0; i < col_row * col_row; i++) {
    		if (max < arry[i]) max = arry[i];//找出最大数
    		max_idx = i;
    	}
    	//行列相乘得到总数量,除以2后加1则为中心点(暂时不考虑偶数的情况)
    	int center_idx = (col_row * col_row) / 2;
    	int tmp = arry[cen ter_idx]; arry[center_idx] = arry[max_idx]; arry[max_idx] = tmp;
    
    	//找到四个最小值
    	int min_idx[4];
    	for (int i = 0; i < 4; i++) {//循环4次获取到最小值
    		int min_tmp = arry[col_row * col_row - 1];
    		for (int j = 0; j < col_row * col_row; j++) {//遍历所有数据,逐个比较获取最小值
    			int k = 0;
    			for (; k < i; k++) {//但是要注意如果某个下标的数据已经是获取过的最小值,则不能进行判断(因为这个肯定是最小的)
    				if (j == min_idx[k]) break;
    			}
    			if (k != i) { continue; }//k和i不同表示j这个坐标已经是找到的最小的几个数字之一,则找下一个判断
    			if (min_tmp > arry[j]) { // 相当于在剩下的数中找到最小的那个数字
    				min_tmp = arry[j];
    				min_idx[i] = j; //并且记录这个数字的位置
    			}
    		}
    	}
        int change_idx[4];//先计算四个角的下标,便于后边进行交换
    	change_idx[0] = 0;//第一个要置换的数据的下标,也就是左上角
    	change_idx[1] = col_row - 1;//第二个要置换的数据的下标,也就是右上角
    	change_idx[2] = col_row * (col_row - 1);//第一个要置换的数据的下标,也就是左下角
    	change_idx[3] = (col_row * col_row) - 1;//第一个要置换的数据的下标,也就是右下角
    	for (int i = 0; i < 4; i++) {
    		int tmp = arry[change_idx[i]]; arry[change_idx[i]] = arry[min_idx[i]]; arry[min_idx[i]] = tmp;
    	}
    	return ;
    }
    int main()
    {
    	int arry[5][5];
    	printf("Please enter a 5x5 matrix: 
    ");
    	for (int i = 0; i < 5; i++) {
    		for (int j = 0; j < 5; j++) {
    			scanf_s("%d", &arry[i][j]);
    		} 
    	}
    	transform(*arry, 5);//将二维数组当做一维数组传入处理,并且传入行列数
    	printf("
    ");
    	for (int i = 0; i < 5; i++) {
    		for (int j = 0; j < 5; j++) {
    			printf("%d ", arry[i][j]);
    		}
    		printf("
    ");
    	}
    	system("pause");
    	return 0;
    }
    
    

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

  • 相关阅读:
    scan chain的原理和实现——3.Tester Timing
    pattern——serial/paralel
    Scan and ATPG (Tessent)----1.基础概念
    ipdb介绍及Tensor
    pytorch简介
    Python 之map、filter、reduce
    分类器、logistic回归
    机器学习方法、距离度量、K_Means
    动态规划、图
    T分布
  • 原文地址:https://www.cnblogs.com/cyuyanchengxu/p/13386203.html
Copyright © 2011-2022 走看看