蓝桥杯中的螺旋矩阵问题
2014-10-30 22:10
155 查看
题目内容:
一个从里向外逆时针转出来的螺旋n*n的矩阵 输
输入描述
矩阵的规模,0~50,如5表示5行5列的矩阵
输出描述
矩阵的规模,0~50,如5表示5行5列的矩阵,每个数占5位
输入样例
5
输出样例
25 24 23 22 21
10 9 8 7 20
11 2 1 6 19
12 3 4 5 18
13 14 15 16 17
分析:首先要确定1的位置,根据总结,得出1的y坐标等于n/2,1的x坐标不确定,然后就是设置旋转了这个分析起来有点晕,看了一会儿后会发现,首先是每次填写数字都有左下右上这么四个过程,而且之后就是这四个过程的重复,而且每次一条线上的数据的长度都在增加,这样就好说了
一个从里向外逆时针转出来的螺旋n*n的矩阵 输
输入描述
矩阵的规模,0~50,如5表示5行5列的矩阵
输出描述
矩阵的规模,0~50,如5表示5行5列的矩阵,每个数占5位
输入样例
5
输出样例
25 24 23 22 21
10 9 8 7 20
11 2 1 6 19
12 3 4 5 18
13 14 15 16 17
分析:首先要确定1的位置,根据总结,得出1的y坐标等于n/2,1的x坐标不确定,然后就是设置旋转了这个分析起来有点晕,看了一会儿后会发现,首先是每次填写数字都有左下右上这么四个过程,而且之后就是这四个过程的重复,而且每次一条线上的数据的长度都在增加,这样就好说了
#include<stdio.h> #define M 51 int main() { int a[M][M] = {0},b[M][2]; int i,j,x,y,p = 1,q = 1,m = 1,k,l,r,s,t; int n; int flag = 0,flagg = 1;; b[0][0] = 0; b[0][1] = 1; scanf("%d",&n); for(i = 1;i <= n; i++) { if(flag%2 == 0) { b[i][0] = b[i - 1][0] + 1; b[i][1] = b[i - 1][1]; } if(flag%2 == 1) { b[i][0] = b[i - 1][0]; b[i][1] = b[i - 1][1] + 1; } flag++; } for(i = 0;i < M; i++) if(i + 2 == n) { x = b[i][0]; y = b[i][1]; } t = x; s = y; while(m <= n*n) { for(j = s;j >= s - p; j--) { a[t][j] = m; m++; } for(k = t + 1;k <= t + q; k++) { a[k][j + 1] = m; m++; } p++; q++; for(l = j + 2;l <= j + p; l++)//坑爹的l = j + 2,我开始一直用j + 1,老是有问题,看来细心真的很重要啊 { a[k - 1][l] = m; m++; } for(r = k - 1;r >= k - q; r--) { a[r][l] = m; m++; } p++; q++; s = l; t = r; } for(i = 0;i < n; i++) { for(j = 0;j < n; j++) { if(j == 0) printf("%d",a[i][j]); else printf("%5d",a[i][j]); } //putchar('\n'); printf("\n"); } return 0; }
相关文章推荐
- 螺旋矩阵问题
- 螺旋矩阵问题
- 螺旋矩阵问题求解
- 蓝桥杯矩阵乘法问题(JAVA)
- 蓝桥杯——Anagrams问题 ,字串统计 ,矩阵乘法 ,大小写转换
- 备考蓝桥杯(13)顺时针螺旋填入矩阵 java实现
- 数学问题(二)螺旋矩阵
- 【蓝桥杯单片机组】| DS1302(官方驱动)+ 矩阵按键 + 数码管(改,解决数码管跳动的问题)
- [转载]数学之美 系列十八 - 矩阵运算和文本处理中的分类问题
- 从易到难编写C++程序,(8)问题:实现一个矩阵类
- 螺旋输出N*N矩阵
- 数学之美 系列十八 - 矩阵运算和文本处理中的分类问题
- 关于矩阵加括号的问题
- n*n按行按列升序矩阵中找数问题
- 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,...
- 逆蛇型矩阵(螺旋魔方矩阵)
- 螺旋矩阵
- 矩阵的乘法问题
- 输出螺旋矩阵(二)
- 矩阵表达和方块覆盖问题