• poj 1102.LC-Display 解题报告


    题目链接:http://poj.org/problem?id=1102

    题目意思:就是根据给出的格式 s 和 数字 n,输出数值 n 的 LCD 显示。数值 n 的每个数字要占据 s + 2 列 和 2s + 3 行。数字和数字之间要有一个空格。数值与数值之间有一个空行。

      首先对于LCD 的 7 个笔画显示编上序号

         

        然后对于数字 i,分析出占用了哪几个笔画,例如,数字 1 占有的笔画是 3 和 6;数字 6 占有的笔画是 1, 2, 4, 5, 6, 7

      用数组来存储每一个笔画分别被那些数字占有,如果是打横的笔画,就放在 horizontal[][] 上;打竖的笔画放在 vertical[][]。然后根据数值 n 来根据对应的horizontal[][] 和 vertical[][] 的占有情况来输出。

      

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxrow = 4 + 2;
     8 const int maxcol = 10 + 2;
     9 
    10 // 数字0~9占有的笔画编号
    11 // 打横的笔画,笔画编号分别为:         1               4            7
    12 char horizontal[maxrow][maxcol] = {"- -- -----", "  ----- --", "- -- -- --"};
    13 // 打竖的笔画,笔画编号分别为:         2               3            5              6
    14 char vertical[maxrow][maxcol] =   {"|   ||| ||", "|||||  |||", "| |   | | ", "|| |||||||"};
    15 char n[maxcol];
    16 int s, len;
    17 
    18 void get_horizontal(int row)
    19 {
    20     for (int j = 0; j < len; j++)
    21     {
    22         printf(" ");
    23         for (int i = 1; i <= s; i++)
    24             printf("%c", horizontal[row][n[j]-'0']);
    25         printf("  ");
    26     }
    27 }
    28 
    29 void get_vertical(int row)
    30 {
    31     for (int j = 0; j < len; j++)
    32     {
    33         printf("%c", vertical[row][n[j]-'0']);
    34         for (int i = 1; i <= s; i++)
    35             printf(" ");
    36         printf("%c ", vertical[row+1][n[j]-'0']);
    37     }
    38 }
    39 
    40 int main()
    41 {
    42     #ifndef Online_Judge
    43         freopen("in.txt", "r", stdin);
    44     #endif // Online_Judge
    45     while (scanf("%d%s", &s, n) != EOF)
    46     {
    47         if (s == 0 && !strcmp(n, "0"))
    48             break;
    49         len = strlen(n);
    50         for (int i = 1; i <= 2*s+3; i++)    // 共 2s+3 行
    51         {
    52             if (i == 1)                       // 第 1 行             打横的笔画
    53                 get_horizontal(0);
    54             else if (i > 1 && i < s+2)        // 第 2 ~ s+1 行      打竖的笔画
    55                 get_vertical(0);
    56             else if (i == s+2)                // 第 s+2 行           打横的笔画
    57                 get_horizontal(1);
    58             else if (i > s+2 && i < 2*s+3)    // 第 s+3 ~ 2s+2 行   打竖的笔画
    59                 get_vertical(2);
    60             else
    61                 get_horizontal(2);            // 第 2s+3 行          打横的笔画
    62             printf("
    ");
    63         }
    64         printf("
    ");     
    65     }
    66     printf("
    ");         // 这个空行是是否 wa 的关键!要特别小心 = =
    67     return 0;
    68 }

      

  • 相关阅读:
    java爬虫(八)使用node.js获取network中api接口内信息并用java的jsoup重写该方法
    java爬虫(七)使用httpclient模拟浏览器GET,POST
    Java selenium对cookies的操作
    java爬虫(六)分析AJAX接口获取网页动态内容
    java爬虫(五)利用selenium 模拟点击获取动态页面的内容
    java爬虫(四)利用Jsoup获取需要登陆的网站中的内容(无验证码的登录)
    java爬虫(三)利用HttpClient和Jsoup模拟网页登陆(无验证码)
    Java远程服务器调优
    20 vue-router的使用
    19 关于Vue中main.js,App.vue,index.html之间关系进行总结
  • 原文地址:https://www.cnblogs.com/windysai/p/4197999.html
Copyright © 2020-2023  润新知