USC 1143: 显示器

来源:互联网 发布:unity3d手游开发教程 编辑:程序博客网 时间:2024/05/18 01:52

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");    }}




0 0
原创粉丝点击