旋转矩阵
实现:N*N矩阵; 0<=N<=10,
例如:n = 3时,
输出为:
123
894
765
竞赛题,实在是想不出,还在努力。
请大神们帮下忙,麻烦大家了。
[解决办法]
虽然有所不同,但思路却差不多的。参考:
C++面试题:循环数列问题
[解决办法]
KISS - Keep It Simple and Stupid.
仅供参考
- C/C++ code
#include <stdio.h>#define MAXN 10char m[MAXN+2][MAXN+2];char d;int x,y,k,n;void main() { while (1) { printf("Input n(1..%d):",MAXN); fflush(stdout); rewind(stdin); if (1==scanf("%d",&n)) { if (1<=n && n<=MAXN) break; } } y=0 ;for (x=0;x<=n+1;x++) m[y][x]=1; y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1; x=0 ;for (y=0;y<=n+1;y++) m[y][x]=1; x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1; for (y=1;y<=n;y++) { for (x=1;x<=n;x++) { m[y][x]=0; } } x=1; y=1; k=0; d='D'; while (1) { k++; if (k>n*n) break; m[y][x]=k; switch (d) { case 'D': if (0==m[y+1][x]) y++; else {x++;d='R';} break; case 'R': if (0==m[y][x+1]) x++; else {y--;d='U';} break; case 'U': if (0==m[y-1][x]) y--; else {x--;d='L';} break; case 'L': if (0==m[y][x-1]) x--; else {y++;d='D';} break; } } for (y=1;y<=n;y++) { for (x=1;x<=n;x++) { printf("%4d",m[y][x]); } printf("\n"); }}