题目
题目链接
题解实现。
这个题无论如何都是可以做出来的,就是用时长短的问题,所以还是可以采用一些技巧来缩短耗时的。
规定:最上面的二极管编号为0,左上角二极管编号为1,右上角编号为2,正中间的为3,左下角为4,右下角为5,最下面的为6,总共七个二极管; 对于不同的数,同一个二极管的亮暗是不同的,因此我们构建了一个数组来表示他们的状态:
int LED[10][7] = { // LED[i][j]表示数i(i=0~9)的第j个二极管是暗还是亮。下面我规定的顺寻为“上左右下左右下”,1表示亮0表示暗
{1, 1, 1, 0, 1, 1, 1},
{0, 0, 1, 0, 0, 1, 0},
{1, 0, 1, 1, 1, 0, 1},
{1, 0, 1, 1, 0, 1, 1},
{0, 1, 1, 1, 0, 1, 0},
{1, 1, 0, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 1},
{1, 0, 1, 0, 0, 1, 0},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 0, 1, 1}
};
以数字5为例,最上面的二极管是亮的,因此LED[5][0] = 1
;左上角二极管也是亮的,因此LED[5][1] = 1
;右上角二极管是灭的,LED[5][2] = 0
;中间的是亮的,LED[5][3] = 0
,其他类似。
这样每次我们只需要比较两个输入的数字同一个位置上数字之间要进行多少次操作,累加一下就可以了。
代码#include
using namespace std;
string s1, s2;
int n, ans;
int LED[10][7] = { // LED[i][j]表示数i(i=0~9)的第j个二极管是暗还是亮。下面我规定的顺寻为“上左右下左右下”,1表示亮0表示暗
{1, 1, 1, 0, 1, 1, 1},
{0, 0, 1, 0, 0, 1, 0},
{1, 0, 1, 1, 1, 0, 1},
{1, 0, 1, 1, 0, 1, 1},
{0, 1, 1, 1, 0, 1, 0},
{1, 1, 0, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 1},
{1, 0, 1, 0, 0, 1, 0},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 0, 1, 1}
};
int fun(int a, int b) { // 计算从a变到b要操作多少次, a、b均为0~9
int res = 0;
for(int i = 0;i >n>>s1>>s2;
for(int i = 0;i
关注
打赏