思路
每 \(4\) 列字符为一组,判断每一组,输出就可以了。
我有一个可能比较好的判断方法,就是先判断第三行——第一列一定是 .
,所以我判断是都是从第二个开始,请牢记——有以下这 \(4\) 种可能:
-
为
#.#
,这种只有一个——\(0\),直接输出 \(0\) 就可以了。 -
为
.#.
,这种只有一个——\(1\),直接输出 \(1\) 就可以了。 -
为
..#
,这种只有一个——\(7\),直接输出 \(7\) 就可以了。
剩下为 ###
的就比较恶心了,具体如下:
-
判断第四行,如果为
#..
,这种只有一个——\(2\),直接输出 \(2\) 就可以了。 -
判断第四行,如果为
..#
,这种有 \(4\) 个:-
判断第二行的第一个(请记住,我忽略了原本是第一个的
.
),如果为.
,这种只有一个——\(3\),直接输出 \(3\) 就可以了。 -
判断第二行的第三个,如果为
.
,这种只有一个——\(5\),直接输出 \(5\) 就可以了。 -
判断第一行的第二个,如果为
.
,这种只有一个——\(4\),直接输出就可以了。
-
-
其他的有 \(2\) 个:
- 判断第二行的第三个,如果为
.
,这种只有一个——\(6\),直接输出 \(6\) 就可以了。 - 最后一个直接输出 \(9\) 就可以了。
- 判断第二行的第三个,如果为
代码
#include<iostream>
#include<cstdio>
using namespace std;
int n;
char a[6][250];
void pd()
{
for(int i=0;i<=n*4;i+=4){
if(a[3][i+1]=='#'&&a[3][i+2]=='#'&&a[3][i+3]=='#'){
if(a[4][i+1]=='#'&&a[4][i+2]=='.'&&a[4][i+3]=='.') cout<<2;
else if(a[4][i+1]=='.'&&a[4][i+2]=='.'&&a[4][i+3]=='#'){
if(a[2][i+1]=='.') cout<<3;
else if(a[1][i+2]=='.') cout<<4;
else if(a[2][i+3]=='.') cout<<5;
else cout<<9;
}
else{
if(a[2][i+3]=='.') cout<<6;
else cout<<8;
}
}
else if(a[3][i+1]=='#'&&a[3][i+2]=='.'&&a[3][i+3]=='#') cout<<0;
else if(a[3][i+1]=='.'&&a[3][i+2]=='.'&&a[3][i+3]=='#') cout<<7;
else if(a[3][i+1]=='.'&&a[3][i+2]=='#'&&a[3][i+3]=='.') cout<<1;
}
}
int main()
{
cin>>n;
for(int i=1;i<=5;i++) scanf("%s",a[i]);
pd();
return 0;
}
提交的时候 \(3\) 次 UKE,今晚提交了一下才 AC。