将一个5X5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右,从上到下顺序依次从小到大存放),写一函数实现之,用主函数调用。
我没用手动输入。太累了。测试一次输入25个数。人会疯的
- #include<iostream>
- #include<string>
- #include<iomanip>
- using namespace std;
- int main()
- {
- void swap(int *p);
- int a[5][5];
- int j,k,i;
- int *p;
- for(i=1,j=0;j<5;j++)
- {
- for(k=0;k<5;i++,k++)
- a[j][k]=i;
- }
- p=&a[0][0];
- swap(p);
- for(j=0;j<5;j++)
- {
- for(k=0;k<5;k++)
- cout<<setw(3)<<a[j][k]<<" ";
- cout<<endl<<endl;
- }
- }
- void swap(int *p)
- {
- int j,k,i,temp;
- int *min,*max;
- max=p;
- min=p;
- // ————————————————————————————
- for(j=0;j<5;j++)
- {
- for(k=0;k<5;k++)
- { if(*max<*(p+5*j+k))
- max=(p+5*j+k);
- if(*min>*(p+5*j+k))
- min=p+5*j+k;
- }
- }
- temp=*(p+12);//——————————————————
- *(p+12)=*max;//————找出最大数与方阵中间交换———
- *max=temp;//——————————————
- temp=*(p+0);//——————————————————
- *(p+0)=*min;//———找出最小数与方阵左上角交换——
- *min=temp;//———————
- //——————————————————————————————
- min=(p+1);//假设min在0 1 (0 0已经存入最小数)
- ;
- for(j=0;j<5;j++)
- {
- for(k=0;k<5;k++)
- { if(j==0&&k==0)continue ;//不执行
- if(*min>*(p+5*j+k))
- min=p+5*j+k;
- }
- }
- temp=*(p+4);//——————————————————
- *(p+4)=*min;//———找出次小数与方阵右上角交换——
- *min=temp;//——————————————
- //——————————————————————————————
- min=(p+1);
- for(j=0;j<5;j++)
- {
- for(k=0;k<5;k++)
- { if((j==0&&k==0)||(j==0&&k==4)) continue ;//不执行
- if(*min>*(p+5*j+k))
- min=p+5*j+k;
- }
- }
- temp=*min;//——————————————————
- *min=*(p+20);//———找出次次小数与方阵左下角交换——
- *(p+20)=temp;//——————————————
- //——————————————————————————————
- min=p+1;//假设min在0 1 (0 0 /0 4 /4 0已经存入最小数/次小数/次次小数)
- for(j=0;j<5;j++)
- {
- for(k=0;k<5;k++)
- {
- if((j==0&&k==0)||(j==0&&k==4)||(j==4&&k==0))continue ;//不执行
- if(*min>*(p+5*j+k))
- min=(p+5*j+k);
- }
- }
- temp=*(p+24);//——————————————————
- *(p+24)=*min;//———找出次次次小数与方阵右下角交换——
- *min=temp;//——————————————
- //----------------------------------------------------------------
- }