c++算法入门题 3

 1 /*
 2 3. 打印一个 N*N 的方阵,N为每边           N=15  打印出下面图形
 3  字符的个数(3<N<20), 要求最               TTTTTTTTTTTTTTT
 4  外一层为"T", 第二层为"J", 从第三层               TJJJJJJJJJJJJJT
 5  起每层依次打印数字 1,2,3,                     TJ11111111111JT
 6  (右图以N为15为例)                           TJ12222222221JT
 7                                                   TJ12333333321JT
 8                                                   TJ12344444321JT
 9                                                   TJ12345554321JT
10                                                   TJ12345654321JT
11                                                   TJ12345554321JT
12                                                   TJ12344444321JT
13                                                   TJ12333333321JT
14                                                   TJ12222222221JT
15                                                   TJ11111111111JT
16                                                   TJJJJJJJJJJJJJT
17                                                   TTTTTTTTTTTTTTT
18 
19 
20 */
21 
22 
23 
24 #include <iostream>
25 #include <cstdlib>
26 #include <cmath>
27 
28 using namespace std;
29 
30 int CurrentCharToDraw(int i, int j);
31 int N = 0;
32 void main()
33 {    
34     int currentItem = 0;
35     cout << "input value for N( 3 < N < 20):\n";
36     cin >> N;
37     for (int i = 0; i < N; i++)
38     {
39         for (int j = 0; j < N; j++)
40         {
41             currentItem = CurrentCharToDraw(i, j);
42             if (currentItem > 0)
43             {
44                 cout << currentItem;
45             } else {
46                 if (currentItem == -1)
47                 {
48                     cout << "J"// -1
49                 } else { /// -2
50                     cout << "T";
51                 }
52             }
53         }
54         cout << '\n';
55     }
56 }
57 
58 int CurrentCharToDraw(int i, int j)
59 {
60     int currentItem = 0;
61     int currentDistance = 0;
62     int distanceToH = 0;
63     int distanceToV = 0;
64     distanceToH = i < N - 1 - i ? i : N - 1 - i;
65     distanceToV = j < N - 1 - j ? j : N - 1 - j;
66     currentDistance = distanceToH < distanceToV ? distanceToH : distanceToV;
67     if (currentDistance < 2 )//(abs(i - N) < 2 || i < 2)
68     {                        
69         currentItem = currentDistance - 2;
70     } else {
71         currentItem = currentDistance - 1;
72     }
73     return currentItem;
74 }

posted on 2009-04-13 11:21 walking snail 阅读(127) 评论(0)  编辑 收藏 引用 所属分类: 算法

导航

<2025年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿

随笔分类

文章分类(13)

文章档案(16)

相册

搜索

最新评论