1012: 数码管

1012: 数码管

时间限制: 10 Sec  内存限制: 128 MB
提交: 276  解决: 184
[提交][状态][讨论版]

题目描述

液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即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

提示

 

来源

2001289

#include <iostream>
using namespace std;
bool contain(int m,int n){
 int i,j,s=0;
 string str[10] = {"123456","23","12457","12347","2367","13467","134567","123","1234567","123467"};
    int mlen = str[m].length();
    int nlen = str[n].length();
    int min = mlen<nlen?mlen:nlen;
    for(i=0;i<mlen;i++){
     for(j=0;j<nlen;j++){
      if(str[m][i]==str[n][j]) s++;
     }
    }
    if(s==min) return true;
    else return false;
}
int main(){
 
 int b[10],f,i;
 while(1){
  cin>>b[0];
  if(b[0]==-1) break;
  for(i=1;i<10;i++){
   cin>>b[i];
  } 
  f=1;
  for(i=0;i<9;i++){
   if((contain(b[i],b[i+1]))==0){
     f=0;
            break;
   }
  
  }
  if(f==0) cout<<"NO"<<endl;
     else cout<<"YES"<<endl;
 }
 
 return 0;
}

原文地址:https://www.cnblogs.com/lchzls/p/5781474.html