螺旋方阵
如何用c语言输出一个螺旋方阵,新手,尽量简单点,带点解释更好,麻烦大家了#include"stdafx.h" #include <stdio.h> #define N 100 int Matrix[N][N] = {0}; enum direction{top, bottom, left, right};//螺旋着跑的方向 void printMatrix(int n){ //打印方阵 for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ printf("%d\t", Matrix[i][j]); } printf("\n"); } } bool isOver(int i, int j, int n){ //是否符合结束条件 bool tag = true; if(j < n-1 && Matrix[i][j + 1] ==0) tag = false; if(j > 0 && Matrix[i][j - 1] ==0) tag = false; if(i < n-1 && Matrix[i + 1][j] ==0) tag = false; if(i > 0 && Matrix[i - 1][j] ==0) tag = false; return tag; } void logicalOperation(int n){ //对方阵逻辑操作 direction flag = right; int i = 0, j = 0, data = 1; while(true){ Matrix[i][j] = data; switch(flag){ case right: { if(j == n - 1 || Matrix[i][j + 1] != 0){ i++; flag = bottom; } else j++; } break; case bottom: { if(i == n - 1 || Matrix[i + 1][j] != 0){ j--; flag = left; } else i++; } break; case left: { if(j == 0 || Matrix[i][j - 1] != 0){ i--; flag = top; } else j--; } break; case top: { if(i == 0 || Matrix[i - 1][j] != 0){ j++; flag = right; } else i--; } break; default: break; } data++; if(isOver(i, j, n)){ Matrix[i][j] = data; break; } } } int main() { int n; //n阶方阵 printf("input N:"); scanf("%d", &n); getchar(); if(n < 1 || n > 100){ printf("envalid number!\n"); return 0; } logicalOperation(n); printMatrix(n); return 0; }
[此贴子已经被作者于2017-4-10 17:02编辑过]
#include <stdio.h> #include <Windows.h> #include <stdlib.h> #define N 5 void travel(int arr[][N]); int main(void) { int arr[N][N] = { 0 }; int i, j; travel(arr); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) printf("%-3d", arr[i][j]); printf("\n"); } system("pause"); return 0; } void travel(int arr[][N]) { int i = 0, j = 0; int count = 1; int y = N - 1, x = 0; while (1) { arr[i][j] = count++; //printf("%4d, i=%d, j=%d\n", arr[i][j], i, j); if (arr[i][j] == N*N) break; else if (i == x && j<=y-1) //向右移动 j++; else if (j == y && i <= y - 1) //向下移动 i++; else if (i == y && j >= x+1) //向左移动 j--; else if (j==x && i>=x+2) //向上移动, 一圈结束 i--; else if (i == j + 1) //一圈结束后, y--, x++理解 { j++; y--; x++; } } return; }