这里我们要输入一个正整数N,而输出的则是2N-1的方阵,形式如上图。
当我们第一次见到这种题时我们想到的第一种解法可能是翻折,很明显方阵可以分为四个面积相等的方阵,然后四个方阵完全相同,这就意味着四个方阵对称,我们可以将左上角的方阵打出来后进行翻折,最终就能成为我们所需要的方阵,但这样程序未免有些过于复杂。
这里采用一种新的思路:方阵覆盖。
仔细观察方阵,如3阶方阵,我们可以看成,第一步先将方阵全部赋值为1,第二步,从第2列第2行到,第4行所覆盖的方阵赋值为2,最后第三行第三列的方阵赋值为3。这就实现了方阵的覆盖。不论怎么覆盖,边界之和一定为2N,如2到4行,3到3行,1到5行,两数之和一定为2N。
有了这个思路,我们就可以开始编写程序了,我们这里采用二维数组进行操作:
这种方法,不仅程序简单,思路也很简单,但就是难以想到,程序可以不断优化,方法也是可以不断优化的。