定义一个5*5的矩阵(二维数组),赋上初值,通过调用函数实现:将数组中的最大值放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),在主函数中输出变换后的数组。

头文件

#include 

主函数

int  main()
{
	int arr[5][5] = { {16,2,3,4,5,},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25},{31,32,33,34,35} };
	int i, j;
	printf("改变前:\n");
	print(arr); //输出改变前矩阵
	move(arr);//改变四个边
	maxx(arr);//改变中心
	printf("改变后:\n");
	print(arr);//输出改变后
	return 0;
}

输出函数

void print(int* p)//输出函数
{
	int i, j;
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("%-4d", *(p + i * 5 + j));
		}
		printf("\n");
	}
}

最大值中心函数

void maxx(int* p)
{
	int i, j, t, * pmax;
	pmax = p;
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			if (*(p + i * 5 + j) > *pmax)
				pmax = p + i * 5 + j;
		}
	}
	t = *pmax;
	*pmax = *(p +5*2+2);
	*(p + 5 * 2 + 2) = t;
}

最小值四边函数

void move(int* p)
{
	int i, j,*pmin,t;	
	pmin = p;	
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			if (*(p + i * 5 + j) < *pmin)//判断是否小于第一位
				pmin = p + i * 5 + j;//把最小值存放到pmin中,使得pmin这个地址指向p + i * 5 + j地址
		}
	}
	t = *pmin;
	*pmin = *p;    //把最小值放如第一位
	*p = t;        
	/*pmin = p + 1;*/
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			
			if ((p != (p + i * 5 + j)) && (*(p + i * 5 + j) < *pmin)) // 使得第二位的值不等于不等于前面的值
				pmin = p + i * 5 + j;
		}
	}
	t = *pmin;//第二
	*pmin = *(p+4);
	*(p+4) = t;
	/*pmin = p + 1;*/
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			if ((p+4 != (p + i * 5 + j)) && (p !=p + i * 5 + j) && (*(p + i * 5 + j) < *pmin))// 使得第三位的值不等于不等于前面的值
				pmin = p + i * 5 + j;
		}
	}
	t = *pmin;//第三
	*pmin = *(p + 20);
	*(p + 20) = t;
	pmin = p + 1;
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			if ((p + 20 != (p + i * 5 + j)) && (p + 4 != (p + i * 5 + j)) && (p != p + i * 5 + j) && (*(p + i * 5 + j) < *pmin))// 使得第四位的值不等于不等于前面的值
				pmin = p + i * 5 + j;
		}
	}
	t = *pmin;//第三
	*pmin = *(p + 24);
	*(p + 24) = t;
}

仅供参考,如有雷同纯属意外;

你可能感兴趣的:(矩阵,算法)