USC 1143: 显示器

USC  1143:显示器

  具体题目请点击以下链接: 点击打开链接
     对于该题,我们可以先讨论s=1时的情况。 当s=1时,我们可以在五行三列的方格中,将数字0-9相应部分用黑色

填充。然后发现以下规律:


     可以将数字分为5个部分(即5行),每一行不同的数字有相同的部分。


行数                该行有相同部分的数字集合
1                      【1】0、2、3、5、6、7、8、9      【2】1、4
2                      【1】1、2、3、7    【2】5、6    【3】0、4、8、9
3                      【1】0、1、7      【2】2、3、4、5、6、8、9
4                      【1】2    【2】0、6、8     【3】1、3、4、5、7、9

5                      【1】1、4、7    【2】0、2、3、5、6、8、9


     n用字符数组保存,此时用一个循环扫描该字符数组5次,每扫描一次就输出扫描到的数字的该行部分。

     当n>1时,规律也一样。具体代码如下(代码中是0-4行):

#include<stdio.h>
#include<string.h>
int main()
{
    int s,i,j,k,x,y;
    char b[15],ch;
    while(scanf("%d %s",&s,b)!=EOF)
    {
        if(s==0&&b[0]=='0')
            return 0;
        i=0;
        while(i<5)
        {
            if(i==0||i==2||i==4)
            {
                for(j=0; j<strlen(b); j++)
                {
                    ch=b[j];
                    switch(i)
                    {
                    case 0:
                        switch(ch)
                        {
                        case '1':
                        case '4':
                        {
                            if(j!=0) putchar(' ');
                            for(k=1; k<=s+2; k++) putchar(' ');
                        }
                        break;
                        case '0':
                        case '2':
                        case '3':
                        case '5':
                        case '6':
                        case '7':
                        case '8':
                        case '9':
                        {
                            if(j!=0) putchar(' ');
                            putchar(' ');
                            for(k=1; k<=s; k++) putchar('-');
                            putchar(' ');
                        }
                        break;
                        }
                        break;

                    case 2:
                        switch(ch)
                        {
                        case '0':
                        case '1':
                        case '7':
                        {
                            if(j!=0) putchar(' ');
                            for(k=1; k<=s+2; k++) putchar(' ');
                        }
                        break;
                        case '4':
                        case '2':
                        case '3':
                        case '5':
                        case '6':
                        case '8':
                        case '9':
                        {
                            if(j!=0) putchar(' ');
                            putchar(' ');
                            for(k=1; k<=s; k++) putchar('-');
                            putchar(' ');
                        }
                        break;
                        }
                        break;

                    case 4:
                        switch(ch)
                        {
                        case '1':
                        case '4':
                        case '7':
                        {
                            if(j!=0) putchar(' ');
                            for(k=1; k<=s+2; k++) putchar(' ');
                        }
                        break;
                        case '0':
                        case '2':
                        case '3':
                        case '5':
                        case '6':
                        case '8':
                        case '9':
                        {
                            if(j!=0) putchar(' ');
                            putchar(' ');
                            for(k=1; k<=s; k++) putchar('-');
                            putchar(' ');
                        }
                        break;
                        }
                        break;
                    }
                }
                putchar('\n');
            }
            else if(i==1||i==3)
                switch(i)
                {
                case 1:
                    for(x=1; x<=s; x++)
                    {
                        for(y=0; y<strlen(b); y++)
                        {
                            ch=b[y];
                            switch(ch)
                            {
                            case '0':
                            case '4':
                            case '8':
                            case '9':
                            {
                                if(y!=0) putchar(' ');
                                putchar('|');
                                for(k=1; k<=s; k++) putchar(' ');
                                putchar('|');
                            }
                            break;
                            case '5':
                            case '6':
                            {
                                if(y!=0) putchar(' ');
                                putchar('|');
                                for(k=1; k<=s+1; k++) putchar(' ');
                            }
                            break;
                            case '1':
                            case '2':
                            case '3':
                            case '7':
                            {
                                if(y!=0) putchar(' ');
                                for(k=1; k<=s+1; k++) putchar(' ');
                                putchar('|');
                            }
                            break;
                            }
                        }
                        putchar('\n');
                    }
                    break;
                case 3:
                    for(x=1; x<=s; x++)
                    {
                        for(y=0; y<strlen(b); y++)
                        {
                            ch=b[y];

                            switch(ch)
                            {
                            case '4':
                            case '1':
                            case '3':
                            case '5':
                            case '7':
                            case '9':
                            {
                                if(y!=0) putchar(' ');
                                for(k=1; k<=s+1; k++) putchar(' ');
                                putchar('|');
                            }
                            break;
                            case '2':
                            {
                                if(j!=0) putchar(' ');
                                putchar('|');
                                for(k=1; k<=s+1; k++) putchar(' ');
                            }
                            break;
                            case '0':
                            case '6':
                            case '8':
                            {
                                if(y!=0) putchar(' ');
                                putchar('|');
                                for(k=1; k<=s; k++) putchar(' ');
                                putchar('|');
                            }
                            break;
                            }
                        }
                        putchar('\n');
                    }
                    break;
                }
            i++;
        }
        putchar('\n');
        memset(b,0,sizeof b);
    }
    return 0;
}

我是以5个部分枚举的,当然也可以从0-9每个数字分别枚举。

运行效果如下:



也可以使用打表法,更简洁明了,参考代码如下:

#include <stdio.h>
#include <string.h>
char n1[11] = {"- -- -----"};
char n2[11] = {"|   ||| ||"};
char n3[11] = {"|||||  |||"};
char n4[11] = {"  ----- --"};
char n5[11] = {"| |   | | "};
char n6[11] = {"|| |||||||"};
char n7[11] = {"- -- -- --"};
int main()
{
    int s;
    char szNumber[20];
    int nDigit , nLength, i , j , k;
    while(1)
    {
        scanf( "%d%s", &s, szNumber);
        if (s == 0)     break;
        nLength = strlen(szNumber);
        for (i = 0 ; i < nLength ; i++)  //输出所有数字的笔画 1
        {
            nDigit = szNumber[i] - '0';
            printf(" ");
            for (j = 0 ; j < s ; j++)   printf("%c", n1[nDigit]);
            printf("  ");
        }
        printf("\n");
        for (i = 0 ; i < s ; i++)  //输出所有数字的笔画2 和笔画3
        {
            for (j = 0 ; j < nLength ; j++)
            {
                nDigit = szNumber[j] - '0';
                printf("%c", n2[nDigit]);
                for (k = 0 ; k < s ; k++)     printf(" ");
                printf("%c ", n3[nDigit]);
            }
            printf("\n");
        }
        for (i = 0 ; i < nLength ; i++) //输出所有数字的笔画4
        {
            printf(" ");
            nDigit = szNumber[i] - '0';
            for (j = 0 ; j < s ; j++)     printf("%c", n4[nDigit]);
            printf("  ");
        }
        printf("\n");
        for (i = 0 ; i < s ; i++) //输出所有数字的笔画 5 和笔画 6
        {
            for (j = 0 ; j < nLength ; j++)
            {
                nDigit = szNumber[j] - '0';
                printf("%c", n5[nDigit]);
                for (k = 0 ; k < s ; k++)     printf( " ");
                printf("%c ", n6[nDigit]);
            }
            printf("\n");
        }
        for (i = 0 ; i < nLength ; i++)    //输出所有数字的笔画 7
        {
            printf(" ");
            nDigit = szNumber[i] - '0';
            for (j = 0 ; j < s ; j++)    printf("%c", n7[nDigit]);
            printf("  ");
        }
        printf("\n");
        printf("\n");
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值