【问题描述】
液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即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
【参考文章】
【AC代码】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int link[10]={0b11111100,0b01100000,0b11011010,
0b11110010,0b01100110,0b10110110,
0b10111110,0b11100000,0b11111110,
0b11110110};
bool judge(int last,int now)
{
/* 逐位判断 */
bool Flag1=true,Flag2=true;
int num1=link[last]>>1,num2=link[now]>>1;
for(int i=1;i<=7;i++){
int flag1=num1&1,flag2=num2&1;
if(flag1&&!flag2) Flag1=false;
if(!flag1&&flag2) Flag2=false;
num1=num1>>1,num2=num2>>1;
}
/* F1=T or F2=T or F1,2=T时才能返回true */
return Flag1||Flag2;
}
int main()
{
int last,now;
while(cin>>last&&last!=-1)
{
int cnt=9;
bool flag=true;
while(cnt--)
{
cin>>now;
//cout<<last<<" "<<now<<" "<<judge(last,now)<<endl;
if(!judge(last,now)&&flag) flag=false;
last=now;
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}