Problem D: C语言习题 矩阵元素变换
2016-06-18 16:11
405 查看
Problem D: C语言习题 矩阵元素变换
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1093 Solved: 643
[Submit][Status][Web
Board]
Description
将一个n×n(2<n<10,n为奇数)的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右、从上到下顺序依次从小到大存放),写一函数实现。用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*
;
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<stdio.h> #include<stdlib.h> 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; 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; }
相关文章推荐
- Problem C: C语言习题 整数排序
- Java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案
- 双向循环链表-模板-自定义类型
- 遍历二叉树
- C语言的指针、链表的原理和各类操作
- 论飞机游戏在C语言程序的基本语句能完成功能的体会
- 飞机游戏在C语言程序的基本语句能完成功能的体会
- 飞机游戏在C语言程序的基本语句能完成功能的体会
- 飞机游戏在C语言程序的基本语句能完成功能的体会
- 飞机游戏在C语言程序的基本语句能完成功能的体会
- c++面向对象小结(一)--构造函数 析构函数
- C++ 虚函数的对象模型
- 头文件互相包含与error C2146: 语法错误 : 缺少“;”的问题
- C++带异常处理的CharStack
- 二叉树 复习&学习
- leetcode_c++:Summary Ranges(228)
- 第十六周项目 二进制文件浏览器
- 第十六周项目 用二进制文件处理学生成绩
- 第十六周项目 用文件保存的学生名单
- 第十六周项目 电子词典