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

  

时间: 2024-10-26 13:26:19

poj 1102.LC-Display 解题报告的相关文章

poj 3020 Antenna Placement 解题报告

题目链接:http://poj.org/problem?id=3020 题目意思:首先,请忽略那幅有可能误导他人成分的截图(可能我悟性差,反正有一点点误导我了). 给出一幅 h * w 的图,  “ * ” 表示 point of interest,“ o ” 忽略之.你可以对 " * " (假设这个 “* ”的坐标是 (i, j))画圈,每个圈只能把它四周的某一个点括住(或者是上面(i-1, j) or 下面(i+1, j) or 左边(i, j-1)  or 右边(i, j+1))

poj 1789 Truck History 解题报告

题目链接:http://poj.org/problem?id=1789 题目意思:给出 N 行,每行7个字符你,统计所有的 行 与 行 之间的差值(就是相同位置下字母不相同),一个位置不相同就为1,依次累加.问最终的差值最少是多少. 额.....题意我是没看懂啦= =......看懂之后,就转化为最小生成树来做了.这是一个完全图,即每条边与除它之外的所有边都连通.边与边的权值是通过这个差值来算出来的. 1 #include <iostream> 2 #include <cstdio>

poj 1860 Currency Exchange 解题报告

题目链接:http://poj.org/problem?id=1860 题目意思:给出 N 种 currency, M种兑换方式,Nick 拥有的的currency 编号S 以及他的具体的currency(V).M 种兑换方式中每种用6个数描述: A, B, Rab, Cab, Rba, Cba.其中,Rab: 货币A 兑换 货币B 的汇率为Rab,佣金为Cab.Rba:货币B 兑换 货币 A 的汇率,佣金为Cba.假设含有的A货币是x,那么如果兑换成B,得到的货币B 就是:(x-Cab) *

poj 2531 Network Saboteur 解题报告

题目链接:http://poj.org/problem?id=2531 题目意思:将 n 个点分成两个部分A和B(也就是两个子集啦), 使得子集和最大(一定很难理解吧,呵呵).举个例子吧,对于样例,最佳的分法就是把点2分为一个子集,另一个子集理所当然就是1.3了. 2-1 的权值是50,2-3的权值是40,那么最大就是50+40 = 90了. 首先dfs的话,我不太会做啦.看了队长的用了状态压缩来做,一下子觉得好神奇!!!! 可能第一次接触,理解得不是太深刻,先留着吧.就觉得好神奇,好神奇...

poj 3368 Frequent values 解题报告

题目链接:http://poj.org/problem?id=3368 题目意思:给出一段 n 个数的序列你,对于区间 [l, r] 的询问,找出 出现频率最高的数的次数.考虑到序列中的数是非递减的,也就是相同的数会连续不间断地在一起,于是就才有了代码中这个部分来预判了: if (s > t)        printf("%d\n", ans); 这个人写RMQ 写得不错:http://dongxicheng.org/structure/lca-rmq/ 这题就是套模板的,纪念

poj 1325 Machine Schedule 解题报告

题目链接:http://poj.org/problem?id=1325 题目意思:有 k 个作业,机器A有 n 个模式:0 ~ n-1,机器B 有 m 个模式:0~ m-1.每一个作业能运行在 A 的 某一个模式(假设为 i (0 <= i <= n-1 ) )或 B 的某一个模式下(j (0 <= j <= m-1)).多个作业可以同时运行在 A 的某一个 模式下,当然 B 也如此.每对A 或 B 转换一次模式,就要重启一次 A 或者 B,你需要选择A 或 B 的一些模式,使得所

POJ 2897 Monkeys&#39; Pride 解题报告

Description Background There are a lot of monkeys in a mountain. Every one wants to be the monkey king. They keep arguing with each other about that for many years. It is your task to help them solve this problem. Problem Monkeys live in different pl

【原创】poj ----- 2524 Ubiquitous Religions 解题报告

题目地址: http://poj.org/problem?id=2524 题目内容: Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 26119   Accepted: 12859 Description There are so many different religions in the world today that it is difficult to keep tra

【原创】poj ----- 1611 The Suspects 解题报告

题目地址: http://poj.org/problem?id=1611 题目内容: The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 24253   Accepted: 11868 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recogni

poj 2389.Bull Math 解题报告

题目链接:http://poj.org/problem?id=2389 题目意思:就是大整数乘法. 题目中说每个整数不超过 40 位,是错的!!!要开大点,这里我开到100. 其实大整数乘法还是第一次写 = =.......大整数加法写得比较多.百练也有一条是大整数乘法,链接如下:http://bailian.openjudge.cn/practice/2980/ 一步一步模拟即可,代码就是按这个来写的. 以 835 * 49 为例(亲爱的读者,允许我截图吧) 简直就是神奇呀----- 1 #i