题目描述
液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即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
#include <iostream> #include <string> using namespace std; bool isfsb(string s1,string s2) { int len1=s1.length(),len2=s2.length(); int p1=0,p2=0; int cnt=0; while(p1<len1 && p2<len2) { while(p1<len1 && p2<len2 && s1[p1]<s2[p2]) p1++; while(p1<len1 && p2<len2 && s1[p1]==s2[p2]) {p1++;p2++;cnt++;} while(p1<len1 && p2<len2 && s1[p1]>s2[p2]) p2++; } if(cnt==len1 || cnt==len2) return true; else return false; } int main() { string number[10]={"123567","35","23467","23456","1345","12456","124567","235","1234567","123456"}; int a[10],i; while(1) { cin>>a[0]; if(a[0]==-1) break; for(i=1;i<10;i++) { cin>>a[i]; } for(i=1;i<10;i++) { if(!isfsb(number[a[i-1]],number[a[i]])) { cout<<"NO"<<endl; break; } } if(i==10) cout<<"YES"<<endl; } return 0; }