NYOJ H : 没错,就让你做A+B

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chimchim04/article/details/78522491

H : 没错,就让你做A+B

比赛链接:http://oj.nyist.me/OJ/contest_problemset.php?cid=1036&showmsg=1   

题目描述

什么?听说你把上一道A+B做出来了!这么厉害的吗,那我就再出一道A+B的题考考你!(不不不,我一点都不厉害,为什么大佬一定要这样对我们!!!(这是我的心里活动,不是题目里的))
现在给你一个A和一个B,输出A+B的值。

但是为了增加难度,这个式子你要用图形表示,'0'到'9'的表示如下图所示(还有'+','-','='符号)


##### ....# ##### ##### #...# ##### ##### ##### ##### ##### ..... ..... .....
#...# ....# ....# ....# #...# #.... #.... ....# #...# #...# ..#.. ..... .....
#...# ....# ....# ....# #...# #.... #.... ....# #...# #...# ..#.. ..... #####
#...# ....# ##### ##### ##### ##### ##### ....# ##### ##### ##### ##### .....
#...# ....# #.... ....# ....# ....# #...# ....# #...# ....# ..#.. ..... #####
#...# ....# #.... ....# ....# ....# #...# ....# #...# ....# ..#.. ..... .....
##### ....# ##### ##### ....# ##### ##### ....# ##### ##### ..... ..... .....


输入

T组输入,接下来的T行(T<300),每一行输入A,B(0<=|A|,|B|<=1000000000)

输出

按照输出要求,输出该等式A+B=?。(能省略的正号,应省略)(两个图形之间用一列'.'隔开)(自己看输出理解题意)
两个输出之间输出一个空行。

样例输入

复制
2
1 -11
193 257

样例输出

复制
....#...........#.....#.................#.#####
....#...........#.....#.................#.#...#
....#...........#.....#.#####...........#.#...#
....#.#####.....#.....#.......#####.....#.#...#
....#...........#.....#.#####...........#.#...#
....#...........#.....#.................#.#...#
....#...........#.....#.................#.#####

....#.#####.#####.......#####.#####.#####.......#...#.#####.#####
....#.#...#.....#...#.......#.#.........#.......#...#.#.....#...#
....#.#...#.....#...#.......#.#.........#.#####.#...#.#.....#...#
....#.#####.#####.#####.#####.#####.....#.......#####.#####.#...#
....#.....#.....#...#...#.........#.....#.#####.....#.....#.#...#
....#.....#.....#...#...#.........#.....#...........#.....#.#...#
....#.#####.#####.......#####.#####.....#...........#.#####.#####

提示

恩。。。首先做这道的路程十分复杂,我先看了一下这道题果断跳过了这道题,然后我做了一下下一题,好像很简单的样子(感觉自己好天真!!),过了样例后,屁颠屁颠去交题,结果。。。就说我太天真,回去多试了几组数据。。。。(以下省略2000心酸史,反正我没A),然后我又看到了最后一题,啊找规律啊,我喜欢。。。。表示规律是什么,能吃吗?
然后我陷入了绝望,绝望中钓起了鱼,然后在第N次醒来的时候决定我要振作,说不定还有救,然后去了趟WC。。
回来的途中碰到了大佬,他说,他说。。:今天的题真的很简单啊!!
感受到了来自大佬的鄙视,不是激励,所以我又打开了题。。。
花了一个小时,把上面的字符存好了。。。然后思考了一下,打到一半,大概80行的样子,发现比赛快要结束了,我第一反应是:不行,我的代码,赶紧交上去,存下档。。哈哈哈,感觉自己好机智,有没有!!感觉自己在写小说。。。。其实思路很简单主要是代码,事后听说这是大佬特地给我们出的!!!我只能说:谢谢大佬(咬牙切齿)。
放代码:
我先放题解,自己的代码晚点放,
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
int b[100],lb;
void fenjie(int x)//把数字分解,然后存进b数组中
{
    if(x<0) x=-x;//去掉符号
    int k[15];
    int lk=0;
    if(x==0) k[lk++]=0;//如果数字为0要存入0!!!!!
    while(x)//倒叙
    {
        k[lk++]=x%10;
        x/=10;
    }
    for(int i=lk-1; i>=0; i--)
        b[lb++]=k[i];//再到着存入b中
    return ;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        lb=0;
        int A,B,C;
        scanf("%d%d",&A,&B);
        C=A+B;
        if(A<0) b[lb++]=11;//控制A的符号
        fenjie(A);
        if(B<0) b[lb++]=11;//控制B的符号,不是负号就是正号。
        else b[lb++]=10;//10表示'+',11表示'-',12表示'=';
        fenjie(B);
        b[lb++]=12;//输出等号
        if(C<0) b[lb++]=11;//控制C的符号
        fenjie(C);
        //b数组中存输出顺序
        for(int i=0;i<7;i++)
        {
            for(int j=0;j<lb;j++)
            {
                if(j) printf(".");
                if(b[j]==0)
                {
                    if(i==0) printf("#####");
                    if(i==1) printf("#...#");
                    if(i==2) printf("#...#");
                    if(i==3) printf("#...#");
                    if(i==4) printf("#...#");
                    if(i==5) printf("#...#");
                    if(i==6) printf("#####");
                }
                if(b[j]==1)
                {
                    if(i==0) printf("....#");
                    if(i==1) printf("....#");
                    if(i==2) printf("....#");
                    if(i==3) printf("....#");
                    if(i==4) printf("....#");
                    if(i==5) printf("....#");
                    if(i==6) printf("....#");
                }
                if(b[j]==2)
                {
                    if(i==0) printf("#####");
                    if(i==1) printf("....#");
                    if(i==2) printf("....#");
                    if(i==3) printf("#####");
                    if(i==4) printf("#....");
                    if(i==5) printf("#....");
                    if(i==6) printf("#####");
                }
                if(b[j]==3)
                {
                    if(i==0) printf("#####");
                    if(i==1) printf("....#");
                    if(i==2) printf("....#");
                    if(i==3) printf("#####");
                    if(i==4) printf("....#");
                    if(i==5) printf("....#");
                    if(i==6) printf("#####");
                }
                if(b[j]==4)
                {
                    if(i==0) printf("#...#");
                    if(i==1) printf("#...#");
                    if(i==2) printf("#...#");
                    if(i==3) printf("#####");
                    if(i==4) printf("....#");
                    if(i==5) printf("....#");
                    if(i==6) printf("....#");
                }
                if(b[j]==5)
                {
                    if(i==0) printf("#####");
                    if(i==1) printf("#....");
                    if(i==2) printf("#....");
                    if(i==3) printf("#####");
                    if(i==4) printf("....#");
                    if(i==5) printf("....#");
                    if(i==6) printf("#####");
                }
                if(b[j]==6)
                {
                    if(i==0) printf("#####");
                    if(i==1) printf("#....");
                    if(i==2) printf("#....");
                    if(i==3) printf("#####");
                    if(i==4) printf("#...#");
                    if(i==5) printf("#...#");
                    if(i==6) printf("#####");
                }
                if(b[j]==7)
                {
                    if(i==0) printf("#####");
                    if(i==1) printf("....#");
                    if(i==2) printf("....#");
                    if(i==3) printf("....#");
                    if(i==4) printf("....#");
                    if(i==5) printf("....#");
                    if(i==6) printf("....#");
                }
                if(b[j]==8)
                {
                    if(i==0) printf("#####");
                    if(i==1) printf("#...#");
                    if(i==2) printf("#...#");
                    if(i==3) printf("#####");
                    if(i==4) printf("#...#");
                    if(i==5) printf("#...#");
                    if(i==6) printf("#####");
                }
                if(b[j]==9)
                {
                    if(i==0) printf("#####");
                    if(i==1) printf("#...#");
                    if(i==2) printf("#...#");
                    if(i==3) printf("#####");
                    if(i==4) printf("....#");
                    if(i==5) printf("....#");
                    if(i==6) printf("#####");
                }
                if(b[j]==10)
                {
                    if(i==0) printf(".....");
                    if(i==1) printf("..#..");
                    if(i==2) printf("..#..");
                    if(i==3) printf("#####");
                    if(i==4) printf("..#..");
                    if(i==5) printf("..#..");
                    if(i==6) printf(".....");
                }
                if(b[j]==11)
                {
                    if(i==0) printf(".....");
                    if(i==1) printf(".....");
                    if(i==2) printf(".....");
                    if(i==3) printf("#####");
                    if(i==4) printf(".....");
                    if(i==5) printf(".....");
                    if(i==6) printf(".....");
                }
                if(b[j]==12)
                {
                    if(i==0) printf(".....");
                    if(i==1) printf(".....");
                    if(i==2) printf("#####");
                    if(i==3) printf(".....");
                    if(i==4) printf("#####");
                    if(i==5) printf(".....");
                    if(i==6) printf(".....");
                }
            }
            printf("\n");
        }
        if(t) printf("\n");
    }
}
然后是另一种,也是题解:
/或者是下面的代码(这个代码里面的0都改成点就行了,没对齐看着不舒服,学长也懒得改了0.0)
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
struct node
{
    string s[10];//用结构体有结构体的好处,
} a[15];//用结构体更清晰,不想用字符串和结构体的也可以开三维的char数组。
//每一个a[i]代表i这个数字,10代表'+',11代表'-',12代表'=';
void init()
{
    a[0].s[1]="#####";
    a[0].s[2]="#000#";
    a[0].s[3]="#000#";
    a[0].s[4]="#000#";
    a[0].s[5]="#000#";
    a[0].s[6]="#000#";
    a[0].s[7]="#####";

    a[1].s[1]="0000#";
    a[1].s[2]="0000#";
    a[1].s[3]="0000#";
    a[1].s[4]="0000#";
    a[1].s[5]="0000#";
    a[1].s[6]="0000#";
    a[1].s[7]="0000#";

    a[2].s[1]="#####";
    a[2].s[2]="0000#";
    a[2].s[3]="0000#";
    a[2].s[4]="#####";
    a[2].s[5]="#0000";
    a[2].s[6]="#0000";
    a[2].s[7]="#####";

    a[3].s[1]="#####";
    a[3].s[2]="0000#";
    a[3].s[3]="0000#";
    a[3].s[4]="#####";
    a[3].s[5]="0000#";
    a[3].s[6]="0000#";
    a[3].s[7]="#####";

    a[4].s[1]="#000#";
    a[4].s[2]="#000#";
    a[4].s[3]="#000#";
    a[4].s[4]="#####";
    a[4].s[5]="0000#";
    a[4].s[6]="0000#";
    a[4].s[7]="0000#";

    a[5].s[1]="#####";
    a[5].s[2]="#0000";
    a[5].s[3]="#0000";
    a[5].s[4]="#####";
    a[5].s[5]="0000#";
    a[5].s[6]="0000#";
    a[5].s[7]="#####";

    a[6].s[1]="#####";
    a[6].s[2]="#0000";
    a[6].s[3]="#0000";
    a[6].s[4]="#####";
    a[6].s[5]="#000#";
    a[6].s[6]="#000#";
    a[6].s[7]="#####";

    a[7].s[1]="#####";
    a[7].s[2]="0000#";
    a[7].s[3]="0000#";
    a[7].s[4]="0000#";
    a[7].s[5]="0000#";
    a[7].s[6]="0000#";
    a[7].s[7]="0000#";

    a[8].s[1]="#####";
    a[8].s[2]="#000#";
    a[8].s[3]="#000#";
    a[8].s[4]="#####";
    a[8].s[5]="#000#";
    a[8].s[6]="#000#";
    a[8].s[7]="#####";

    a[9].s[1]="#####";
    a[9].s[2]="#000#";
    a[9].s[3]="#000#";
    a[9].s[4]="#####";
    a[9].s[5]="0000#";
    a[9].s[6]="0000#";
    a[9].s[7]="#####";

    a[10].s[1]="00000";
    a[10].s[2]="00#00";
    a[10].s[3]="00#00";
    a[10].s[4]="#####";
    a[10].s[5]="00#00";
    a[10].s[6]="00#00";
    a[10].s[7]="00000";

    a[11].s[1]="00000";
    a[11].s[2]="00000";
    a[11].s[3]="00000";
    a[11].s[4]="#####";
    a[11].s[5]="00000";
    a[11].s[6]="00000";
    a[11].s[7]="00000";

    a[12].s[1]="00000";
    a[12].s[2]="00000";
    a[12].s[3]="#####";
    a[12].s[4]="00000";
    a[12].s[5]="#####";
    a[12].s[6]="00000";
    a[12].s[7]="00000";
}
int b[300],lb;
void fenjie(int Q)//把数字分解,然后存进b数组中
{
    if(Q<0) Q=-Q;//去掉符号
    int k[15];
    int lk=0;
    if(Q==0) k[lk++]=0;//如果数字为0要存入0。
    while(Q)//倒叙
    {
        k[lk++]=Q%10;
        Q/=10;
    }
    for(int i=lk-1; i>=0; i--)
        b[lb++]=k[i];//再到着存入b中
    return ;
}
int main()
{
    init();// 10表示'+',11表示'-',12表示'=';
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int x,y,z;
        scanf("%d%d",&x,&y);
        z=x+y;
        lb=0;
        if(x<0) b[lb++]=11;//控制x的符号
        fenjie(x);
        if(y<0) b[lb++]=11;//控制y的符号,不是负号就是正号。
        else b[lb++]=10;
        fenjie(y);
        b[lb++]=12;//输出等号
        if(z<0) b[lb++]=11;//控制z的符号
        fenjie(z);
        //b数组中存输出顺序
        for(int i=1; i<=7; i++)//输出第一行到第七行
        {
            for(int j=0; j<lb; j++)//每一行按数组b的顺序输出
            {
                if(j) cout<<"0";//中间用'0'隔开
                cout<<a[b[j]].s[i];//用字符串或者char数组输出都行
            }
            printf("\n");
        }
        if(t) printf("\n");//控制格式
    }
}
然后是我的代码:虽然很复杂但是是比赛时的思路还是打完它
#include<stdio.h>
#include<algorithm>
using namespace std;
char a0[7][5]= {'#','#','#','#','#','#','.','.','.','#','#','.','.','.','#','#','.','.','.','#','#','.','.','.','#','#','.','.','.','#','#','#','#','#','#'};
char a1[7][5]= {'.','.','.','.','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#'};
char a2[7][5]= {'#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','#','#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','#','#','#','#'};
char a3[7][5]= {'#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','#','#','#','#','#'};
char a4[7][5]= {'#','.','.','.','#','#','.','.','.','#','#','.','.','.','#','#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#'};
char a5[7][5]= {'#','#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','#','#','#','#','#'};
char a6[7][5]= {'#','#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','#','#','#','#','#','.','.','.','#','#','.','.','.','#','#','#','#','#','#'};
char a7[7][5]= {'#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#','.','.','.','.','#'};
char a8[7][5]= {'#','#','#','#','#','#','.','.','.','#','#','.','.','.','#','#','#','#','#','#','#','.','.','.','#','#','.','.','.','#','#','#','#','#','#'};
char a9[7][5]= {'#','#','#','#','#','#','.','.','.','#','#','.','.','.','#','#','#','#','#','#','.','.','.','.','#','.','.','.','.','#','#','#','#','#','#'};
char  x[7][5]= {'.','.','.','.','.','.','.','#','.','.','.','.','#','.','.','#','#','#','#','#','.','.','#','.','.','.','.','#','.','.','.','.','.','.','.'};
char  y[7][5]= {'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','#','#','#','#','#','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'};
char  z[7][5]= {'.','.','.','.','.','.','.','.','.','.','#','#','#','#','#','.','.','.','.','.','#','#','#','#','#','.','.','.','.','.','.','.','.','.','.'};
int a[100]= {0},b[100]= {0},c[100]= {0};
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
       int d=0,f=0,g=0,f1=0,f2=0,f3=0;
        long long  n,m,v;
        scanf("%lld%lld",&n,&m);
        v=n+m;
        long long N=n,M=m,V=v;       //把n,m,v的数值存一下
        if(n<0)
        {
            f1=1;
            n=-n;
        }
        while(n)    //把n的各个数位分解,并存到数组a中。
        {
            a[d++]=n%10;
            n/=10;
        }
        if(m<0)
        {
            f2=1;
            m=-m;
        }
        while(m)     //把m各个数位分解,并存到数组b中。
        {
            b[f++]=m%10;
            m/=10;
        }
        if(v<0)
        {
            f3=1;
            v=-v;
        }
        while(v)    //把v分解
        {
            c[g++]=v%10;
            v/=10;
        }
        for(int i=0; i<7; i++)
        {
            if(f1==1)      //如果n是负数先输出负号。
            {
                for(int j=0; j<5; j++)
                    printf("%c",y[i][j]);
                printf(".");
            }
            if(N==0)      //如果n为0,就直接输出0
            {
                for(int j=0; j<5; j++)
                    printf("%c",a0[i][j]);
                printf(".");
            }
            else   //否则就按数组中的数输出
            {
                for(int k=d-1; k>=0; k--)
                {
                    if(a[k]==0)
                        for(int j=0; j<5; j++)
                            printf("%c",a0[i][j]);
                    if(a[k]==1)
                        for(int j=0; j<5; j++)
                            printf("%c",a1[i][j]);
                    if(a[k]==2)
                        for(int j=0; j<5; j++)
                            printf("%c",a2[i][j]);
                    if(a[k]==3)
                        for(int j=0; j<5; j++)
                            printf("%c",a3[i][j]);
                    if(a[k]==4)
                        for(int j=0; j<5; j++)
                            printf("%c",a4[i][j]);
                    if(a[k]==5)
                        for(int j=0; j<5; j++)
                            printf("%c",a5[i][j]);
                    if(a[k]==6)
                        for(int j=0; j<5; j++)
                            printf("%c",a6[i][j]);
                    if(a[k]==7)
                        for(int j=0; j<5; j++)
                            printf("%c",a7[i][j]);
                    if(a[k]==8)
                        for(int j=0; j<5; j++)
                            printf("%c",a8[i][j]);
                    if(a[k]==9)
                        for(int j=0; j<5; j++)
                            printf("%c",a9[i][j]);
                    printf(".");    //注意格式
                }
            }
                if(f2==1)
                    for(int j=0; j<5; j++)
                        printf("%c",y[i][j]);
                else
                    for(int j=0; j<5; j++)
                        printf("%c",x[i][j]);
                printf(".");
                if(M==0)
                {
                    for(int j=0;j<5;j++)
                    printf("%c",a0[i][j]);
                    printf(".");
                }
                else
                {
                    for(int k=f-1; k>=0; k--)
                    {
                        if(b[k]==0)
                            for(int j=0; j<5; j++)
                                printf("%c",a0[i][j]);
                        if(b[k]==1)
                            for(int j=0; j<5; j++)
                                printf("%c",a1[i][j]);
                        if(b[k]==2)
                            for(int j=0; j<5; j++)
                                printf("%c",a2[i][j]);
                        if(b[k]==3)
                            for(int j=0; j<5; j++)
                                printf("%c",a3[i][j]);
                        if(b[k]==4)
                            for(int j=0; j<5; j++)
                                printf("%c",a4[i][j]);
                        if(b[k]==5)
                            for(int j=0; j<5; j++)
                                printf("%c",a5[i][j]);
                        if(b[k]==6)
                            for(int j=0; j<5; j++)
                                printf("%c",a6[i][j]);
                        if(b[k]==7)
                            for(int j=0; j<5; j++)
                                printf("%c",a7[i][j]);
                        if(b[k]==8)
                            for(int j=0; j<5; j++)
                                printf("%c",a8[i][j]);
                        if(b[k]==9)
                            for(int j=0; j<5; j++)
                                printf("%c",a9[i][j]);
                        printf(".");
                    }
                }
                for(int j=0; j<5; j++)
                    printf("%c",z[i][j]);
                printf(".");
                if(f3==1)
                {
                    for(int j=0; j<5; j++)
                        printf("%c",y[i][j]);
                        printf(".");
                }
                if(V==0)
                {
                  for(int j=0;j<5;j++)
                    printf("%c",a0[i][j]);
                }
                else
                {
                    for(int k=g-1; k>0; k--)
                    {
                        if(c[k]==0)
                            for(int j=0; j<5; j++)
                                printf("%c",a0[i][j]);
                        if(c[k]==1)
                            for(int j=0; j<5; j++)
                                printf("%c",a1[i][j]);
                        if(c[k]==2)
                            for(int j=0; j<5; j++)
                                printf("%c",a2[i][j]);
                        if(c[k]==3)
                            for(int j=0; j<5; j++)
                                printf("%c",a3[i][j]);
                        if(c[k]==4)
                            for(int j=0; j<5; j++)
                                printf("%c",a4[i][j]);
                        if(c[k]==5)
                            for(int j=0; j<5; j++)
                                printf("%c",a5[i][j]);
                        if(c[k]==6)
                            for(int j=0; j<5; j++)
                                printf("%c",a6[i][j]);
                        if(c[k]==7)
                            for(int j=0; j<5; j++)
                                printf("%c",a7[i][j]);
                        if(c[k]==8)
                            for(int j=0; j<5; j++)
                                printf("%c",a8[i][j]);
                        if(c[k]==9)
                            for(int j=0; j<5; j++)
                                printf("%c",a9[i][j]);
                        printf(".");
                    }
                    if(c[0]==0)       //v的最后一位数字后面没有'.',所以单独输出
                            for(int j=0; j<5; j++)
                                printf("%c",a0[i][j]);
                        if(c[0]==1)
                            for(int j=0; j<5; j++)
                                printf("%c",a1[i][j]);
                        if(c[0]==2)
                            for(int j=0; j<5; j++)
                                printf("%c",a2[i][j]);
                        if(c[0]==3)
                            for(int j=0; j<5; j++)
                                printf("%c",a3[i][j]);
                        if(c[0]==4)
                            for(int j=0; j<5; j++)
                                printf("%c",a4[i][j]);
                        if(c[0]==5)
                            for(int j=0; j<5; j++)
                                printf("%c",a5[i][j]);
                        if(c[0]==6)
                            for(int j=0; j<5; j++)
                                printf("%c",a6[i][j]);
                        if(c[0]==7)
                            for(int j=0; j<5; j++)
                                printf("%c",a7[i][j]);
                        if(c[0]==8)
                            for(int j=0; j<5; j++)
                                printf("%c",a8[i][j]);
                        if(c[0]==9)
                            for(int j=0; j<5; j++)
                                printf("%c",a9[i][j]);
                }
                printf("\n");
        }
        if(t>0)
            printf("\n");
    }
    return 0;
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页