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