int light[9][7]={
0,0,0,0,0,0,0,
0,0,0,0,0,0,0,//按1
0,0,0,1,1,1,0,//按1按4
0,0,1,0,1,0,1,//按3
0,0,1,1,0,1,1,//按1按4
0,1,0,0,1,0,0,//按4
0,1,0,1,0,1,0,//按2
0,1,1,0,0,0,1,//按2按4
0,1,1,1,1,1,1,//不按
};//常量表
int minnum[9]={0,1,2,1,1,2,1,2,0};//对应常量表8个状态最少摁的次数4.然后就可以开始写代码了,嘿嘿flag1=false;
for(i=1;i<9;i++)
{
flag2=true;
for(j=1;j<=n;j++)
{
if(dat[j]==-1)//如果没有确定是亮或灭
continue;
tmp=j%6;//六位循环
if(tmp==0)//如果是6的倍数
tmp=6;
if(dat[j]!=light[i][tmp])//有个灯不同说明不是这个状态,结束判断
{
flag2=false;
break;
}
}
if(flag2==true&&c>=minnum[i])
{
flag1=true;//有一个满足条件就标记
for(j=1;j<=n;j++)
{
tmp=j%6;
if(tmp==0)
tmp=6;
cout<<light[i][tmp];
}
cout<<endl;
}
}
if(flag1==false)
cout<<"IMPOSSIBLE"<<endl;原文地址:http://blog.csdn.net/mmoaay/article/details/40535533