/*
* 程序的版權和版本聲明部分:
* Copyright (c) 2012, 煙台大學計算機學院
* All rights reserved.
* 文件名稱:將一個5*5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素.cpp
* 作 者:毛通
* 完成日期:2013 年 1月16 日
* 版 本 號:v1.0
* 對任務及求解方法的描述部分:
* 輸入描述:輸入25個數
* 問題描述:
* 程序輸出:“將一個5*5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素”
*/
[cpp]
/*
將一個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;
}
/*
運行結果:
*/