您的位置:首页 > 其它

【HDOJ】1332 LC-Display

2014-11-23 16:02 411 查看
水题。

#include <cstdio>
#include <cstring>
#include <cstdlib>

#define MAXN 11
#define LEFT  1
#define RIGHT 2
#define BOTH  3

char lcd[10][MAXN][2*MAXN+3+1][MAXN+2+1];
int rr[MAXN];
int cc[MAXN];

void addR(int x, int i, int j) {
int k;

for (k=1; k<cc[i]-1; ++k)
lcd[x][i][j][k] = '-';
}

void addC(int x, int i,int j, int v) {
if (v & LEFT)
lcd[x][i][j][0] = '|';
if (v & RIGHT)
lcd[x][i][j][cc[i]-1] = '|';
}

void init() {
int i, j, k;
int n;

for (i=1; i<=10; ++i) {
rr[i] = 2*i+3;
cc[i] = i+2;
}

memset(lcd, ' ', sizeof(lcd));

for (k=0; k<10; ++k) {
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
lcd[k][i][j][cc[i]] = '\0';
}
}
}

// 0
n = 0;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==rr[i]-1) {
addR(n, i, j);
} else if (j == i+1) {
/*do nothing*/;
} else {
addC(n, i, j, BOTH);
}
}
}

// 1
n = 1;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==i+1 || j==rr[i]-1) {
/*do nothing*/;
} else {
addC(n, i, j, RIGHT);
}
}
}

// 2
n = 2;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==i+1 || j==rr[i]-1) {
addR(n, i, j);
} else {
if (j < i+1)
addC(n, i, j, RIGHT);
else
addC(n, i, j, LEFT);
}
}
}

// 3
n = 3;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==i+1 || j==rr[i]-1) {
addR(n, i, j);
} else {
addC(n, i, j, RIGHT);
}
}
}

// 4
n = 4;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==rr[i]-1) {
/*do nothing*/;
} else if (j == i+1) {
addR(n, i, j);
} else {
if (j < i+1)
addC(n, i, j, BOTH);
else
addC(n, i, j, RIGHT);
}
}
}

// 5
n = 5;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==i+1 || j==rr[i]-1) {
addR(n, i, j);
} else {
if (j < i+1)
addC(n, i, j, LEFT);
else
addC(n, i, j, RIGHT);
}
}
}

// 6
n = 6;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==i+1 || j==rr[i]-1) {
addR(n, i, j);
} else {
if (j < i+1)
addC(n, i, j, LEFT);
else
addC(n, i, j, BOTH);
}
}
}

// 7
n = 7;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0) {
addR(n, i, j);
} else if (j==i+1 || j==rr[i]-1) {
/*do nothing*/;
} else {
addC(n, i, j, RIGHT);
}
}
}

// 8
n = 8;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==i+1 || j==rr[i]-1) {
addR(n, i, j);
} else {
addC(n, i, j, BOTH);
}
}
}

// 9
n = 9;
for (i=1; i<=10; ++i) {
for (j=0; j<rr[i]; ++j) {
if (j==0 || j==i+1 || j==rr[i]-1) {
addR(n, i, j);
} else {
if (j < i+1)
addC(n, i, j, BOTH);
else
addC(n, i, j, RIGHT);
}
}
}
}

void output(int n) {
int i, j, k;

for (i=0; i<10; ++i) {
for (j=0; j<rr
; ++j) {
printf("%s\n", lcd[i]
[j]);
}
printf("\n\n");
}
printf("output finish\n");
}

int main() {
int n;
int i, j, k;
char s[15];

#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif

init();
//output(1);

while (scanf("%d %s", &n, s) != EOF) {
if (n==0 && s[0]=='0' && s[1]=='\0')
break;
for (j=0; j<rr
; ++j) {
for (i=0; s[i]; ++i) {
if (i)
printf(" %s", lcd[s[i]-'0']
[j]);
else
printf("%s", lcd[s[i]-'0']
[j]);
}
printf("\n");
}
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: