简单模拟算法2

PAT B1036 和奥巴马一起学算法,非常非常简单的一道题:用指定的字符打印边长为n的矩形,下面是我看别人写的解答,常规思路就是分第一行和最后一行,以及2~n-1行,不过由于在控制台中的行列比例为了使它显示得更像矩形,只打印n/2行。

常规解答:

 1 #include <cstdio>
 2 
 3 int main() {
 4     int n; // 边长
 5     char c; // 字符
 6     scanf("%d %c", &n, &c);
 7 
 8     // 第一行
 9     for (int i = 0; i < n; i++) {
10         printf("%c", c); // n个字符
11     }
12     printf("\n");
13 
14     // 第2~n/2-1行
15     for (int i = 1; i < n / 2 - 2; i++) {
16         printf("%c", c); // 每行的第一个c
17         for (int j = 0; j < n - 2; j++) {
18             printf(" "); // n-2个空格
19         }
20         printf("%c\n", c);
21     }
22 
23     // 第n/2行
24     for (int i = 0; i < n; i++) {
25         printf("%c", c);
26     }
27 
28     return 0;
29 }

运行效果:

虽然是一道非常简单得题,但是我有另一种普通人“常规”得解决方式:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int n;
 7     char c;
 8     cin >> n >> c;
 9     for (int i = 0; i < n / 2; i++) {
10         for (int j = 0; j < n; j++) {
11             if (i == 0 || i == n / 2 - 1 || j == 0 || j == n - 1) {
12                 cout << c;
13             } else {
14                 cout << ' ';
15             }
16         }
17         cout << endl;
18     }
19     return 0;
20 }

对比两种方式,第一种是按计算机的处理方式来进行,计算机打印字符的方式:一江春水向东流,飞流直下三千尺。而第二种则是按照普通人画一个矩形的方式去实现:横竖4条边。

虽然解决的是同一个问题,但换一种思维方式却能使代码更加精简,值得深思。

猜你喜欢

转载自www.cnblogs.com/viewts/p/11237914.html