码迷,mamicode.com
首页 > 其他好文 > 详细

poj 1102.LC-Display 解题报告

时间:2015-01-02 01:09:19      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

题目链接: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("\n");
63         }
64         printf("\n");     
65     }
66     printf("\n");    // 这个空行是是否 wa 的关键!比较卑鄙= =
67     return 0;
68 }

 

  

poj 1102.LC-Display 解题报告

标签:

原文地址:http://www.cnblogs.com/windysai/p/4197999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!