更新
现在是 2020-08-15,最近在看 Android R 的代码,发现 R 的开发者选项新增了一个功能——显示当前的刷新率。我看了一下实现,惊喜的发现里面刷新率数字的显示用的就是这里面的逻辑,那一刻我真的有一种很强烈的 connecting the dots 的感觉
原文
已经很久没有刷题了。前几天在上 EDA
实验课的时候,突然想到了以前一道没有 AC
的题目,并且突然顿悟,想到了可能是正确的解决方法。然后今天着手实现。总算是 1A
。虽然已经退出了 ACM
,不过 AC
的感觉还是跟以前一样。嗯,我有点怀念以前那段岁月了。
题目描述
题意很简单。就是给你一串数,要你模拟出这串数在 LC
屏幕的输出。不过有一个要求,就是还有一个 size
值。
解决方法
常规的按一个数一个数去输出肯定是不行的,因为你无法让光标向上移动,所以,我们需要按层去输出。例如,我是将其分为 5
层。然后,每一层建立一个数组,然后一层一层的输出。这样就可以了。
代码
char row1[] = {'-', ' ', '-', '-', ' ', '-', '-', '-', '-', '-'};
char row2[] = {'|', '|', ' ', '|', ' ', '|', ' ', '|', '|', '|', '|', ' ', '|', ' ', ' ', '|', '|', '|', '|', '|'};
char row3[] = {' ', ' ', '-', '-', '-', '-', '-', ' ', '-', '-'};
char row4[] = {'|', '|', ' ', '|', '|', ' ', ' ', '|', ' ', '|', ' ', '|', '|', '|', ' ', '|', '|', '|', ' ', '|'};
char row5[] = {'-', ' ', '-', '-', ' ', '-', '-', ' ', '-', '-'};
int main(void)
{
int times;
char num[10] = {0};
int i;
int j;
int k;
int m;
int n;
while (scanf("%d%s", ×, num) && times != 0) {
for (i = 0; i < L; i++) {
if (i == 0 || i == 2 || i == 4) {
int len = strlen(num);
for (j = 0; j < len; j++) {
for (k = 0; k < times; k++) {
if (k == 0) {
putchar(' ');
}
switch (i) {
case 0:
printf("%c", row1[num[j] - '0']);
break;
case 2:
printf("%c", row3[num[j] - '0']);
break;
case 4:
printf("%c", row5[num[j] - '0']);
break;
}
if (k == (times - 1)) {
putchar(' ');
}
}
printf("%c", (j == len - 1) ? '\n' : ' ');
}
} else {
for (j = 0; j < times; j++) {
int len = strlen(num);
for (k = 0; k < len; k++) {
switch (i) {
case 1:
printf("%c", row2[(num[k] - '0') * 2 + 0]);
break;
case 3:
printf("%c", row4[(num[k] - '0') * 2 + 0]);
break;
}
for (m = 0; m < times; m++) {
putchar(' ');
}
switch (i) {
case 1:
printf("%c", row2[(num[k] - '0') * 2 + 1]);
break;
case 3:
printf("%c", row4[(num[k] - '0') * 2 + 1]);
break;
}
printf("%c", (k == (len - 1)) ? '\n' : ' ');
}
}
}
}
putchar(10);
}
return 0;
}
EOF
Author: simowce
Permalink: https://blog.simowce.com/LCD-display/
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。