我觉得我的代码的思路比较好吧。。。
几周之前游荡的时候碰见的这道题,觉得这个大模拟实在麻烦,就一直放置play,
在那之后又过了一周(不到?)上数字逻辑课老师在那讲控制七段数码管的亮灭,我一下就想到这道题了,只要指定一个start point,然后在这个区域内控制七个长度为s的发光二极管的亮灭不就可以了么。。。
嘛,然后就是等到今天实现了一下。。。忘写当s == 0时跳出循环WA了一发真是遗憾。。。
下面是代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
using namespace std;
char ls_display[100][200], origin_num[12];
int s;
void lighten_the_column(int x, int y)
{
for(int i = 0; i < s; ++i)
{
ls_display[y + i][x] = '|';
}
return ;
}
void lighten_the_row(int x, int y)
{
for(int i = 0; i < s; ++i)
{
ls_display[y][x + i] = '-';
}
return ;
}
void draw_the_number(char in, int sx, int sy)
{
if(in == '1')
{
// lighten_the_row(sx + 1, sy);
// lighten_the_row(sx + 1, sy + 1 + s);
// lighten_the_row(sx + 1, sy + 2 + 2 * s);
// lighten_the_column(sx, sy + 1);
// lighten_the_column(sx, sy + 2 + s);
lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '2')
{
lighten_the_row(sx + 1, sy);
lighten_the_row(sx + 1, sy + 1 + s);
lighten_the_row(sx + 1, sy + 2 + 2 * s);
// lighten_the_column(sx, sy + 1);
lighten_the_column(sx, sy + 2 + s);
lighten_the_column(sx + 1 + s, sy + 1);
// lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '3')
{
lighten_the_row(sx + 1, sy);
lighten_the_row(sx + 1, sy + 1 + s);
lighten_the_row(sx + 1, sy + 2 + 2 * s);
// lighten_the_column(sx, sy + 1);
// lighten_the_column(sx, sy + 2 + s);
lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '4')
{
// lighten_the_row(sx + 1, sy);
lighten_the_row(sx + 1, sy + 1 + s);
// lighten_the_row(sx + 1, sy + 2 + 2 * s);
lighten_the_column(sx, sy + 1);
// lighten_the_column(sx, sy + 2 + s);
lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '5')
{
lighten_the_row(sx + 1, sy);
lighten_the_row(sx + 1, sy + 1 + s);
lighten_the_row(sx + 1, sy + 2 + 2 * s);
lighten_the_column(sx, sy + 1);
// lighten_the_column(sx, sy + 2 + s);
// lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '6')
{
lighten_the_row(sx + 1, sy);
lighten_the_row(sx + 1, sy + 1 + s);
lighten_the_row(sx + 1, sy + 2 + 2 * s);
lighten_the_column(sx, sy + 1);
lighten_the_column(sx, sy + 2 + s);
// lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '7')
{
lighten_the_row(sx + 1, sy);
// lighten_the_row(sx + 1, sy + 1 + s);
// lighten_the_row(sx + 1, sy + 2 + 2 * s);
// lighten_the_column(sx, sy + 1);
// lighten_the_column(sx, sy + 2 + s);
lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '8')
{
lighten_the_row(sx + 1, sy);
lighten_the_row(sx + 1, sy + 1 + s);
lighten_the_row(sx + 1, sy + 2 + 2 * s);
lighten_the_column(sx, sy + 1);
lighten_the_column(sx, sy + 2 + s);
lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '9')
{
lighten_the_row(sx + 1, sy);
lighten_the_row(sx + 1, sy + 1 + s);
lighten_the_row(sx + 1, sy + 2 + 2 * s);
lighten_the_column(sx, sy + 1);
// lighten_the_column(sx, sy + 2 + s);
lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
else if(in == '0')
{
lighten_the_row(sx + 1, sy);
// lighten_the_row(sx + 1, sy + 1 + s);
lighten_the_row(sx + 1, sy + 2 + 2 * s);
lighten_the_column(sx, sy + 1);
lighten_the_column(sx, sy + 2 + s);
lighten_the_column(sx + 1 + s, sy + 1);
lighten_the_column(sx + 1 + s, sy + 2 + s);
}
}
int main()
{
while(scanf("%d %s", &s, origin_num) != EOF)
{
if(s == 0) break;
int len = strlen(origin_num), sx = 1, sy = 1;
for(int i = 1; i <= (2 * s + 3); ++i)
{
for(int j = 1; j <= len * (s + 2) + (len - 1); ++j)
{
ls_display[i][j] = ' ';
}
}
for(int i = 0; i < len; ++i)
{
draw_the_number(origin_num[i], sx, sy);
sx += s + 3, sy = 1;
}
for(int ii = 1; ii <= (2 * s + 3); ++ii)
{
for(int jj = 1; jj <= (len * (s + 2) + (len - 1)); ++jj)
{
printf("%c", ls_display[ii][jj]);
}
printf("\n");
}
printf("\n");
memset(origin_num, 0, sizeof(origin_num));
}
return 0;
}