将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素

/* 
* 程序的版权和版本声明部分: 
* Copyright (c) 2012, 烟台大学计算机学院 
* All rights reserved. 
* 文件名称:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素.cpp 
* 作    者:毛通 
* 完成日期:2013 年 1月16 日 
* 版 本 号:v1.0 
* 对任务及求解方法的描述部分:
* 输入描述:输入25个数
* 问题描述:
* 程序输出:“将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素” 
*/

 

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

# include <iostream>

# include <iomanip>
using namespace std;

int main()

{
	void change (int *p);

	int a[5][5],*p,i,j;

	cout<<"input matrix" << endl;

    for (i=0;i<5;i++)
		for (j=0;j<5;j++)
			cin>>a[i][j];

	p=&a[0][0];

	cout << "您输入的矩阵是:" <<endl;

	for (i=0;i<5;i++)
	{
		for (j=0;j<5;j++)
			cout << setw(6) <<a[i][j];
		cout << endl;
	}

	change (p);

	cout << "now matrix" << endl;

	for (i=0;i<5;i++)
	{
		for (j=0;j<5;j++)
			cout <<setw(6)<< a[i][j];
		cout << endl;
	}

	return 0;

}

void change (int *p)
{
	int i,j,temp;
	int *pmax,*pmin;

	pmax=p;
	pmin=p;

	for (i=0;i<5;i++) //找最大和最小数的地址,赋给pmax和pmin
		for (j=0;j<5;j++)
		{
			if (*pmax < *(p+5*i+j)) pmax=p+5*i+j; //*(p+5*i+j)当*p=a[0][0]时可以实现 数组的遍历
			if (*pmin > *(p+5*i+j)) pmin=p+5*i+j;
		}//最大最小值的地址找到了

		temp =*(p+12); //将最大值与中心元素互换
		*(p+12)=*pmax;
		*pmax=temp;

		temp=*p;//将最小元素与左上角元素互换
		*p=*pmin;
		*pmin=temp;

		pmin=p+1; //将a[0][1]的地址赋给pmin,从该位置开始找最小的元素

		for (i=0;i<5;i++)
			for (j=0;j<5;j++)
				if (((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) //两个条件:元素小于*pmin;元素不是第一个元素
					pmin =p+5*i+j; //将第二最小值的地址赋给pmin

		temp =*pmin;//将第二最小值与右上角元素互换
		*pmin=*(p+4);
		*(p+4)=temp;

		pmin=p+1; //将a[0][1]的地址赋给pmin,从该位置开始找最小的元素

		for (i=0;i<5;i++)
			for (j=0;j<5;j++)
				if (((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&(*pmin>*(p+5*i+j))) //两个条件:元素小于*pmin;元素不是第一个元素
					pmin =p+5*i+j; //将第三最小值的地址赋给pmin

		temp =*pmin;//将第三最小值与右上角元素互换
		*pmin=*(p+20);
		*(p+20)=temp;

		pmin=p+1; //将a[0][1]的地址赋给pmin,从该位置开始找最小的元素

		for (i=0;i<5;i++)
			for (j=0;j<5;j++)
				if (((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) //两个条件:元素小于*pmin;元素不是第一个元素
					pmin=p+5*i+j; //将第四最小值的地址赋给pmin

		temp =*pmin;//将第四最小值与右上角元素互换
		*pmin=*(p+24);
		*(p+24)=temp;


}


/*
运行结果:



*/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值