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条边。

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

  • 相关阅读:
    Abp Swagger API中文说明配置方法
    ABP框架中使用MySQL数据库
    windows + jenkins + .net core + iis自动化部署新手入门
    在图片上画矩形框
    base64转换成np、opencv、PIL
    RankSVM
    tf.placeholde函数解释与用法
    slim.arg_scope()的使用
    SSD网络结构
    tensorflow学习笔记
  • 原文地址:https://www.cnblogs.com/viewts/p/11237914.html
Copyright © 2011-2022 走看看