Description
函数实现。用main函数调用。
Input
输入n和矩阵中的每个元素
Output
变换后的矩阵
Sample Input
5
25 13 9 5 1
16 17 18 19 6
15 24 4 20 7
14 23 22 21 8
2 12 11 10 3
Sample Output
1 13 9 5 2
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
3 12 11 10 4
HINT
主函数已给定如下,提交时不需要包含下述主函数
/* C代码 */
int main()
{
void change(int *,int );
int **a,*p,i,j;
int n;
scanf("%d",&n);
p=(int*)malloc(n*n*sizeof(int));
a=(int**)malloc(n*sizeof(int *));
for(i=0; i<n; i++)
a[i]=p+n*i;
for (i=0; i<n; i++) //输入矩阵
for (j=0; j<n; j++)
scanf("%d",&a[i][j]);
change(p,n); //调用函数,实现交换
for (i=0; i<n; i++) //输出已交换的矩阵
{
for (j=0; j<n; j++)
printf("%d ",a[i][j]);
printf("\n");
}
free(p);
free(a);
return 0;
}
/* C++代码 */
int main()
{
void change(int *,int );
int **a,*p,i,j;
int n;
cin>>n;
p=new int[n*n];
a=new int*[n];
for(i=0; i<n; i++)
a[i]=p+n*i;
for (i=0; i<n; i++) //输入矩阵
for (j=0; j<n; j++)
cin>>a[i][j];
change(p,n); //调用函数,实现交换
for (i=0; i<n; i++) //输出已交换的矩阵
{
for (j=0; j<n; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
delete []p;
delete []a;
return 0;
}
个人认为难度蛮大的题目
这是一种比较麻烦的方法
但是可以ac
代码如下:
void change(int *p,int n)
{
int t,i,*max,*min1,*min2,*min3,*min4;
min1=max=p;
for(i=0;i<n*n;i++)
if(*max<*(p+i))
max=p+i;
t=*(p+n*n/2);
*(p+n*n/2)=*max;
*max=t;
for(i=0;i<n*n;i++)
{
if(*min1>*(p+i))
min1=(p+i);
}
t=*p;
*p=*min1;
*min1=t;
min2=p+1;
for(i=0;i<n*n;i++)
{
if(*min2>*(p+i)&&(p+i)!=p)
min2=(p+i);
}
t=*(p+n-1);
*(p+n-1)=*min2;
*min2=t;
min3=p+1;
for(i=0;i<n*n;i++)
{
if(*min3>*(p+i)&&(p+i)!=p&&(p+i)!=(p+n-1))
min3=(p+i);
}
t=*(p+n*(n-1));
*(p+n*(n-1))=*min3;
*min3=t;
min4=p+1;
for(i=0;i<n*n;i++)
{
if(*min4>*(p+i)&&(p+i)!=p&&(p+i)!=(p+n-1)&&(p+i)!=(p+n*(n-1)))
min4=(p+i);
}
t=*(p+n*n-1);
*(p+n*n-1)=*min4;
*min4=t;
}
int main()
{
void change(int *,int );
int **a,*p,i,j;
int n;
scanf("%d",&n);
p=(int*)malloc(n*n*sizeof(int));
a=(int**)malloc(n*sizeof(int *));
for(i=0; i<n; i++)
a[i]=p+n*i;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
scanf("%d",&a[i][j]);
change(p,n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf("%d ",a[i][j]);
printf("\n");
}
free(p);
free(a);
return 0;
}