直接判断就可以了吧,分三种情况,遍历移位,2移动一位,23移动2位,233移动三位
#include<iostream>
#include<cmath>
#include<iomanip>
#include<string>
#include<memory.h>
#include<algorithm>
#include<iterator>
#include<vector>
#include<limits.h>
#include<fstream>
using namespace std;
int main()
{
string s;
int i,flag,pos;
while(cin>>s&&s!="0")
{
flag=1,pos=0;
for(i=0;i<=s.size();i++)
{
if(s.substr(pos,1)!="2"){flag=0;break;}
else
{
if(s.substr(pos,3)=="233" ){pos=pos+3;i=pos;}
else if(s.substr(pos,2)=="23"){pos=pos+2;i=pos;}
else if(s.substr(pos,1)=="2"){pos=pos+1;i=pos;}
else{flag=0;break;}
}
}
if(s.find('\n'))
{
if(flag){cout<<"YES"<<endl;}
else{cout<<"NO"<<endl;}
}
}
return 0;
}