首先先提供一下题目样例,题目显示的是图片别复制了ovo(手打好累)
***** * ***** ***** * * ***** ***** ***** ***** ***** * * * * * * * * * * * * * * * * * ***** ***** ***** ***** ***** * ***** ***** * * * * * * * * * * * * * ***** * ***** ***** * ***** ***** * ***** *****
一、题意解释
1、输入保证为5行,字符数不超过200
2、开头数字不为0
3、除“1”占5行1列外,其他数字都占5行五列
4、空格列一定占一整列
二、做法详解
其实只要有一套辨别数字的方法都能做,这里先列举其中一种,以后有空再补qwq
1、先将5行字符串全部转化为01矩阵,以0~9图片为例,我们可以得到下面的01矩阵
11111010111110111110100100011111011111011111011111011111 10001010000010000010100100010000010000000001010001010001 10001010111110111110111110011111011111000001011111011111 10001010100000000010000100000001010001000001010001000001 11111010111110111110000100011111011111000001011111011111
2、将01矩阵以列为单位看作二进制数,再把二进制转十进制保存在f[i]里,称作特征值,我们可以得到:
31 17 17 17 31 0 31 0 29 21 21 21 23 0 21 21 21 21 31 0 7 4 4 31 4 0 0 23 21 21 21 29 0 31 21 21 21 29 0 1 1 1 1 31 0 31 21 21 21 31 0 23 21 21 21 31
3、这样一来我们就可以确定每个数字对应的5位特征值(除1特例),空格列一定为0
0 = 31 17 17 17 31
1 = 31
2 = 29 21 21 21 23
3 = 21 21 21 21 31
4 = 7 4 4 31 4
5 = 23 21 21 21 29
6 = 31 21 21 21 29
7 = 1 1 1 1 31
8 = 31 21 21 21 31
9 = 23 21 21 21 31
4、最后只要遍历一遍f[],找到非0的f[i]就可以根据它以及它的后4位判断出数字
三、要点注意
1、不要用longlong去存数,字符数不超过200意味着最多可以有100个“1”。用数组存或者直接输出
2、需要注意“1”的位置,当“1”为末尾时,后五位会超出数组,需要对“1”特殊处理