07 输出螺旋式数字方阵

请写出一个 C 语言程序,该程序对输入的任意正整数n,产生并且显示相应的 n 阶螺旋式数字方阵。

例如,当 n =5时,要显示的螺旋式数字方阵为

#include <stdio.h>

int main()
{
  int n, i, j;
  scanf("%d", &n);
  for(i=1; i<=n; i++)
  {
    for(j=1; j<=n; j++)
      printf("%3d", get(i, j, n));
    printf("\n");
  }
}
 
// 每次输出一个口
int get(int i, int j, int n)
{
  // 第一行 1 2 3 4 5
  if (i == 1) return j;
  // 最后一行 3*5-1-1=13 3*5-2-1=12
  if (i == n) return 3 * n - j - 1;
  // 第一列(第二~倒数第二行) 4*5-2-2=16
  if (j == 1) return 4 * n - i - 2;
  // 最后一列(第二~倒数第二行) 5+2-1=6
  if (j == n) return n + i - 1;
  // 中间行和列 4*5-4+1=20-3=17
  return 4 * n - 4 + get(i - 1, j - 1, n - 2);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章