#include<iostream>
using namespace std;
//将5*5矩阵中最大元素放在中心,四个角放最小元素
void martrix_func(int* p)
{
int *max = p;
int *min = p;
for(int i=0;i<5;i++)
for (int j = 0; j < 5; j++)
{
if (*(p + 5 * i + j) > *max)
max = (p + 5 * i + j); //找出最大元素
if(*(p+5*i+j)<*min)
min= (p + 5 * i + j); //找出最小元素
}
int temp = *(p + 12);
*(p + 12) = *max; //最大元素与*(p+12),也就是矩阵中间元素交换
*max = temp; //中间元素a[2][2], p+2*5+2
temp = *p;
*p = *min; //最小元素与第一个元素交换
*min = temp;
min = p+1; //将a[0][1]的地址给min
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (*(p + 5 * i + j) != *p && *(p + 5 * i + j) < *min) //找到第二小的元素(a[0][0]经过上面交换已经是最小)
min = (p + 5 * i + j); //将地址给min
temp = *(p + 4);
*(p + 4) = *min; //与a[0][4]交换
*min = temp;
min = p+1; //重新把a[0][1]的地址给min,从此开始找最小元素
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (*(p + 5 * i + j) != *p && *(p + 5 * i + j) != *(p + 4) && *(p + 5 * i + j) < *min)
min = (p + 5 * i + j); //找到第三小的元素
temp = *(p + 20);
*(p + 20) = *min;
*min = temp;
min = p+1;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (*(p + 5 * i + j) != *p && *(p + 5 * i + j) != *(p + 4) && *(p + 5 * i + j) != *(p + 20) && *(p + 5 * i + j) < *min)
min = (p + 5 * i + j); //找到第四小的元素
temp = *(p + 24);
*(p + 24) = *min;
*min = temp;
}
int main()
{
int a[5][5];
cout << "输入矩阵:" << endl;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
cin >> a[i][j];
martrix_func(a[0]);
cout << "新矩阵:" << endl;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
cout << a[i][j] << " ";
cout << endl;
}
return 0;
}
谭浩强c++第三版6-10
最新推荐文章于 2020-04-12 15:58:21 发布