HDU - 旋转矩阵
2011-11-10 11:55
183 查看
知识点:找规律+指针模拟
PS:其实这道题很简单,但看到很多大牛用了很多比较复杂的方法,所以贴上来大家切磋切磋。
问题描述:
旋转矩阵
Time Limit:1000MS Memory Limit:65536K
Total Submit:59 Accepted:31
Description
把前n*n个正整数1,2,...,n*n 从左上角开始,由外层至中心按顺时针方向螺旋排列所成的数字矩阵,旋转成由中心向外层按照顺时针方向螺旋排列成的数字矩阵。
Input
输入一个正整数n(1~20)。
Output
输出旋转前后的两个n阶矩阵,两个矩阵之间用插入一个空行。矩阵中的元素设置宽度为3。
Sample Input
3
Sample Output
1 2 3
8 9 4
7 6 5
9 2 3
8 1 4
7 6 5
PS:其实这道题很简单,但看到很多大牛用了很多比较复杂的方法,所以贴上来大家切磋切磋。
问题描述:
旋转矩阵
Time Limit:1000MS Memory Limit:65536K
Total Submit:59 Accepted:31
Description
把前n*n个正整数1,2,...,n*n 从左上角开始,由外层至中心按顺时针方向螺旋排列所成的数字矩阵,旋转成由中心向外层按照顺时针方向螺旋排列成的数字矩阵。
Input
输入一个正整数n(1~20)。
Output
输出旋转前后的两个n阶矩阵,两个矩阵之间用插入一个空行。矩阵中的元素设置宽度为3。
Sample Input
3
Sample Output
1 2 3
8 9 4
7 6 5
9 2 3
8 1 4
7 6 5
//我的代码: #include<cstdio> int main() { int n; scanf("%d",&n); int a ,tmp=1,max=n*n; //max为矩阵中最大值 /*i、j代表行和列,p1、p2代表最上行数和最下行数,q1、q2代表最左列数和 最右列数 */ int i=0,j,p1=0,p2=n-1,q1=-1,q2=n-1; while(1) { for(j=q1+1;j<=q2;j++) a[i][j]=tmp++; j--,q1++; for(i=p1+1;i<=p2;i++) a[i][j]=tmp++; i--,p1++; if(a[i][j]==max) break; for(j=q2-1;j>=q1;j--) a[i][j]=tmp++; j++,q2--; for(i=p2-1;i>=p1;i--) a[i][j]=tmp++; i++,p2--; if(a[i][j]==max) break; } for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%3d",a[i][j]); putchar('\n'); } putchar('\n'); tmp=n*n; if(n%2) { j=0,p1=-1,p2=n-1,q1=0,q2=n-1; while(1) { for(i=p1+1;i<=p2;i++) a[i][j]=tmp--; i--,p1++; for(j=q1+1;j<=q2;j++) a[i][j]=tmp--; j--,q1++; if(a[i][j]==1) break; for(i=p2-1;i>=p1;i--) a[i][j]=tmp--; i++,p2--; for(j=q2-1;j>=q1;j--) a[i][j]=tmp--; j++,q2--; } } else { j=n-1,p1=0,p2=n,q1=0,q2=n-1; while(1) { for(i=p2-1;i>=p1;i--) a[i][j]=tmp--; i++,p2--; for(j=q2-1;j>=q1;j--) a[i][j]=tmp--; j++,q2--; for(i=p1+1;i<=p2;i++) a[i][j]=tmp--; i--,p1++; for(j=q1+1;j<=q2;j++) a[i][j]=tmp--; j--,q1++; if(a[i][j]==1) break; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%3d",a[i][j]); putchar('\n'); } return 0; }
相关文章推荐
- HDU 4087 三维坐标旋转(仿射变换) 矩阵加速 && 2011 Asia Beijing Regional Contest
- HDU 4087 三维上的平移缩放旋转矩阵变化
- hdu 4998 矩阵表示旋转
- hdu 4998 矩阵表示旋转
- hdu4119 模拟旋转矩阵mask解密
- hdu 4686 Arc of Dream【矩阵快速幂】
- HDU 4920(Matrix multiplication-矩阵乘法优化)
- HDU 2807 The Shortest Path【矩阵的快速比较】
- HDU 2604Queuing(矩阵快速幂)
- HDU 2276 小小矩阵乘法
- hdu 1575 Tr A(矩阵快速幂乘法优化算法)
- hdu 1575(矩阵快速幂)
- 矩阵乘法 --- hdu 4920 : Matrix multiplication
- 2D、3D旋转矩阵
- HDU 2157 How many ways??【矩阵快速幂】
- 将n*n矩阵顺时针旋转90度
- 【矩阵乘法再实践】HDU 2604——queuing
- HDU 3306 Another kind of Fibonacci(快速幂矩阵)
- number number number hdu 6189 矩阵快速幂
- 循环节 + 矩阵快速幂 - HDU 4291 A Short problem