NC214843. A+B
描述
将数字以及加号用字符矩阵的形式进行表示,对应关系如下:
以字符形式给出一个运算式,请你计算结果,同时也请你将结果按照字符的形式输出
输入描述
第一行给出一个正整数,代表测试数据的组数
每两组测试数据之间以一个空白行分隔
每组测试数据共有五行字符串表示一个字符串,字符串长度均不大于500且五行长度相等
算式中只会出现数字和加号,保证输入的算式可计算且小于
输出描述
每组测试数据输出5行字符串表示运算结果,且每两个输出用一个空行隔开
示例1
输入:
2 #.#.....### #.#..#....# ###.###.### ..#..#..#.. ..#.....### ..#.###.###.....#.#.###.###.###.....###.###.### ..#...#...#..#..#.#.#...#...#.#..#..#.#.#.#.#.# ..#.###.###.###.###.###.###.#.#.###.###.###.#.# ..#.#.....#..#....#...#.#.#...#..#..#.#...#.#.# ..#.###.###.......#.###.###...#.....###.###.###
输出:
### #.. ### #.# ### ###.###.###.### #...#...#.#.#.# ###.###.###.#.# ..#...#.#.#.#.# ###.###.###.###
C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 412K, 提交时间: 2023-07-24 14:55:38
#include<iostream> using namespace std; int T; string k[13]={ "####.##.##.####", "..#..#..#..#..#", "###..#####..###", "###..####..####", "#.##.####..#..#", "####..###..####", "####..####.####", "####.##.#..#..#", "####.#####.####", "####.####..####", "....#.###.#....", }; string a[10]; int find(string op){ for(int i=0;i<=10;i++) if(k[i]==op) return i; return -1; } int n,g[105]; void out(int ans){ n=0; while(ans){ g[++n]=ans%10; ans/=10; } for(int i=1;i<=5;i++,printf("\n")) for(int j=n;j>=1;j--,j==0?:printf(".")) for(int q=(i-1)*3;q<i*3;q++) cout<<k[g[j]][q]; cout<<"\n"; } void work(){ int ans=0,tot=0; for(int i=1;i<=5;i++) cin>>a[i]; for(int i=0;i<a[1].length();i+=4){ string op; for(int j=1;j<=5;j++){ op+=a[j][i];op+=a[j][i+1];op+=a[j][i+2]; } int re=find(op); if(re==10) {ans+= tot;tot=0;} else tot=tot*10+re; } ans+=tot; out(ans); } int main(){ cin>>T; while(T--){ work(); } return 0; }