YTU 2418: C语言习题 矩阵元素变换
2016-02-23 20:09
363 查看
2418: C语言习题 矩阵元素变换
时间限制: 1 Sec 内存限制: 128 MB提交: 293 解决: 155
题目描述
将一个n×n(2<n<10,n为奇数)的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右、从上到下顺序依次从小到大存放),写一函数实现。用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("\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 <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* ; 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; }
相关文章推荐
- YTU 2416: C语言习题 成绩输出
- 【structure】练习
- YTU 2414: C语言习题 字符串排序
- YTU 2405: C语言习题 牛顿迭代法求根
- 计算日子差。自由年月日。含闰年判断
- C语言printf怎么折行
- OpenJudge百炼习题解答(C++)--题2704:竞赛评分
- C++学习笔记:MyString类的重载 练习
- 结构体指针和结构体嵌套
- 学习C语言基本思路与参考书籍
- C++构造函数调用规则
- 设计模式之命令模式
- c++中new与delete
- 在MDK中使用C++源格式做printf串口输出时跳死 调试时发现卡在启动代码中
- C++对象模型浅析
- C++基础::便捷函数
- 深入分析C++中声明与定义的区别
- C++基础::shared_ptr 编程细节(二)
- C++及C中的 string char指针及char数组
- C语言的原码,反码和补码