- 数码管
【问题描述】
液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即7有3笔,8有7笔等。对于十个数字一种排列,要做到两相邻数字都可以由另一个数字加上几笔或减去几笔组成,但不能又加又减。比如 7→3是允许的,7→2不允许。任意输入一组数,判断是否符合上述规则,注意,1在右边。
【输入形式】
每行输入一个0~9的排列,数字之间用空格分隔,以-1作为输入结束
【输出形式】
输出YES或NO
【样例输入】
4 1 0 7 3 9 5 6 8 2
3 5 1 6 2 7 9 0 4 8
-1
【样例输出】
YES
NO
//看到这种方法的我直接Σ(っ °Д °;)っ
//模拟笔画是计算机做的事儿,但人脑可以直接搞个转换矩阵出来
//map容易出错
#include <iostream>
#include <vector>
using namespace std;
int main() {
bool map[10][10] = {
{1, 1, 0, 0, 0, 0, 0, 1, 1, 0},//0
{1, 1, 0, 1, 1, 0, 0, 1, 1, 1},//1
{0, 0, 1, 0, 0, 0, 0, 0, 1, 0},//2
{0, 1, 0, 1, 0, 0, 0, 1, 1, 1},//3
{0, 1, 0, 0, 1, 0, 0, 0, 1, 1},//4
{0, 0, 0, 0, 0, 1, 1, 0, 1, 1},//5
{0, 0, 0, 0, 0, 1, 1, 0, 1, 0},//6
{1, 1, 0, 1, 0, 0, 0, 1, 1, 1},//7
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},//8
{0, 1, 0, 1, 1, 1, 0, 1, 1, 1} //9
};
vector<int> vec(10);
bool flag = 1;
while (1) {
flag = 1;
cin >> vec[0];
if (vec[0] == -1) {
break;
}
for (int i = 1; i < 10; i++) {
cin >> vec[i];
if (!map[vec[i]][vec[i - 1]]) {
flag = 0;
}
}
if (flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
}