POJ-1102

我觉得我的代码的思路比较好吧。。。
几周之前游荡的时候碰见的这道题,觉得这个大模拟实在麻烦,就一直放置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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值