列表

详情


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

上一题