zoukankan      html  css  js  c++  java
  • 简单模拟算法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("
    ");
    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
    ", 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条边。

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

  • 相关阅读:
    財智V6.0(完美破解序列号特别版)
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    HDU1006
    HDU 1385 Minimum Transport Cost 最短路径题解
    fast-json.jar的用法
    curl命令具体解释
    mysql很全的和完整的总结
    MongoDB入门简单介绍
    Tuxedo入门学习
    BP神经网络基本原理
  • 原文地址:https://www.cnblogs.com/viewts/p/11237914.html
Copyright © 2011-2022 走看看