关于转圈打印数字,输入指定行和列和起始值,自动完成打印

来源:互联网 发布:网络给手机发短信 编辑:程序博客网 时间:2024/06/04 08:40

要求按照如下格式循环转圈打印数字:

 

1     2     3   4   5
14 15   16  17  6
13  20  19  18  7
12  11  10   9   8


受Jon Bentley(Programming Pearls的作者)的教诲,我对题目进行了重新的清晰定义:

 

输入:输入要打印矩阵的行(width)和列(high),起始值(矩阵左上角的的元素值)initvalue

输出:符合要求的转圈打印数字的矩阵

 

分析,在程序中我们只能按照行扫描打印,即打印函数主体是个双重循环

所以现在问题的关键转化为如何根据程序输入的起始值(initvalue),矩阵宽度(width)

,矩阵高度(high)来确定point(i,j)的值。

观察上面的矩阵,我们不难发现,对于该矩阵的最外层外壳,次外层内壳,........,它们的区别

仅是起始值和宽度和高度的不同,其生成逻辑完全一致,这就要我想到了递归,对了,就是递归

下面是我对该point(x,y)函数的实现:

 

ok,下面附上整个程序和运行测试结果:

 

请将文件保存为RotatingPrintNums.cc

[jim@ts850 algoriths]$ g++ -o RotatingPrintNums RotatingPrintNums.cc

[jim@ts850 algoriths]$ ./RotatingPrintNums
5 6 1
   1    2    3    4    5    6
  18   19   20   21   22    7
  17   28   29   30   23    8
  16   27   26   25   24    9
  15   14   13   12   11   10
[jim@ts850 algoriths]$

 

2011-04-15

原创粉丝点击