2418: C语言习题 矩阵元素变换
时间限制: 1 Sec 内存限制: 128 MB提交: 293 解决: 155
题目描述
函数实现。用main函数调用。
输入
输入n和矩阵中的每个元素
输出
变换后的矩阵
样例输入
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
样例输出
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
提示
主函数已给定如下,提交时不需要包含下述主函数
/* 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("
");
}
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;
}
迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……
#include <iostream> using namespace std; void change(int *k,int p) { int t,*min,*max,i,j; min=max=k; for(i=0; i<p; i++) for(j=0; j<p; j++) { if(*(k+p*i+j)<*min) min=k+p*i+j; else if(*(k+p*i+j)>*max) max=k+p*i+j; } t=*max; *max=*(k+(p*p)/2); *(k+(p*p)/2)=t; t=*min; *min=*k; *k=t; min=&*(k+1); for(i=0; i<p; i++) for(j=0; j<p; j++) if((k+p*i+j)!=k) if(*(k+p*i+j)<*min) min=k+p*i+j; t=*min; *min=*(k+p-1); *(k+p-1)=t; min=&*(k+1); for(i=0; i<p; i++) for(j=0; j<p; j++) if((k+p*i+j)!=(k+p-1)&&(k+p*i+j)!=k) if(*(k+p*i+j)<*min) min=k+p*i+j; t=*min; *min=*(k+p*(p-1)); *(k+p*(p-1))=t; min=&*(k+1); for(i=0; i<p; i++) for(j=0; j<p; j++) if((k+p*i+j)!=k&&(k+p*i+j)!=(k+p-1)&&(k+p*i+j)!=(k+p*(p-1))) if(*(k+p*i+j)<*min) min=k+p*i+j; t=*min; *min=*(k+p*p-1); *(k+p*p-1)=t; } 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; }