不好意思 有个条件judge没有用上
再来一次
#include <stdio.h>
#include<stdlib.h>
#include <time.h>
int a[6]={1,1,1,-1,-1,-1};
int b[6]={0,0,0,0,0,0};
int ans[1000];
void
initial()
{
for(int i=0;i<1000;i++)
ans[i]=0;
}
void printfab()
{
printf("a=");
for(int i=0;i<6;i++)
printf("%d
",a[i]);
printf("b=");
for(i=0;i<6;i++)
printf("%d
",b[i]);
printf("\n");
}
void printfans()
{
for(int i=0;i<1000;i++)
{
if(ans[i]==0)
break;
if(ans[i]==1)
printf("bb->\n");
if(ans[i]==2)
printf("ab->\n");
if(ans[i]==3)
printf("aa->\n");
if(ans[i]==4)
printf("a->\n");
if(ans[i]==5)
printf("b->\n");
if(ans[i]==6)
printf("<-bb\n");
if(ans[i]==7)
printf("<-ab\n");
if(ans[i]==8)
printf("<-aa\n");
if(ans[i]==9)
printf("<-a\n");
if(ans[i]==10)
printf("<-b\n");
}
}
int judge()
{
int i;
int astatus=0,bstatus=0;
int asum=0,bsum=0;
for(i=0;i<6;i++)
{
if(a[i]==1)
{astatus=1;break;}
}
for(i=0;i<6;i++)
{
if(b[i]==1)
{bstatus=1;break;}
}
for(i=0;i<6;i++)
{
asum+=a[i];
bsum+=b[i];
}
if(asum<0&&astatus==1) return 0;
if(bsum<0&&bstatus==1) return 0;
return 1;
}
int
success()
{
int i;
for(i=0;i<6;i++)
{
if(a[i]!=0) break;
}
if(i==6) return 1;
else
return 0;
}
void rightmove1() //a->b(1)
{
int i;
for(i=0;i<6;i++)
{
if(a[i]==1) {a[i]=0;break;}
}
for(i=0;i<6;i++)
{
if(b[i]==0) {b[i]=1;break;}
}
}
void rightmove_1()//a->b(-1)
{
int i;
for(i=0;i<6;i++)
{
if(a[i]==-1) {a[i]=0;break;}
}
for(i=0;i<6;i++)
{
if(b[i]==0) {b[i]=-1;break;}
}
}
void leftmove1()//b->a(1)
{
int i;
for(i=0;i<6;i++)
{
if(b[i]==1) {b[i]=0;break;}
}
for(i=0;i<6;i++)
{
if(a[i]==0) {a[i]=1;break;}
}
}
void leftmove_1()//b->a(-1)
{
int i;
for(i=0;i<6;i++)
{
if(b[i]==-1) {b[i]=0;break;}
}
for(i=0;i<6;i++)
{
if(a[i]==0) {a[i]=-1;break;}
}
}
int num1ofa()
{
int i,sum=0;
for(i=0;i<6;i++) {if(a[i]==1) sum++;}
return sum;
}
int num_1ofa()
{
int i,sum=0;
for(i=0;i<6;i++) {if(a[i]==-1) sum++;}
return sum;
}
int num1ofb()
{
int i,sum=0;
for(i=0;i<6;i++) {if(b[i]==1) sum++;}
return sum;
}
int num_1ofb()
{
int i,sum=0;
for(i=0;i<6;i++) {if(b[i]==-1) sum++;}
return sum;
}
int move(int i)
{//1 商 //-1 仆
if(i==1) //(-1,-1 )->
{
if(num_1ofa()>=2)
{
rightmove_1(); rightmove_1();
if(judge())
return 1;
else
{leftmove_1(); leftmove_1(); return 0; }
}
else
return 0;
}
if(i==2) //(1 ,-1)->
{
if(num1ofa()>=1&&num_1ofa()>=1)
{
rightmove1(); rightmove_1();
if(judge())return 1;
else {leftmove1(); leftmove_1(); return 0;}
}
else
return 0;
}
if(i==3) //(1,1) ->
{
if(num1ofa()>=2)
{
rightmove1(); rightmove1();
if(judge())return 1;
else {leftmove1(); leftmove1(); return 0;}
}
else
return 0;
}
if(i==4) //(1 )->
{
if(num1ofa()>=1) {
rightmove1();
if(judge()) return 1;
else {leftmove1(); return 0;}
}
else
return 0;
}
if(i==5) //(-1 )->
{
if(num_1ofa()>=1) {
rightmove_1();
if(judge())
return 1;
else {leftmove_1(); return 0;}
}
else
return 0;
}
if(i==6) //<- ( -1,-1)
{
if(num_1ofb()>=2) {
leftmove_1(); leftmove_1();
if(judge())
return 1;
else {
rightmove_1(); rightmove_1(); return 0;}
}
else
return 0;
}
if(i==7) //<-
( 1 ,-1)
{
if(num1ofb()>=1&&num_1ofb()>=1) {leftmove1(); leftmove_1();
if(judge())
return 1;
else {
rightmove1(); rightmove_1();
return 0;}
}
else
return 0;
}
if(i==8) //<-
(1 , 1)
{
if(num1ofb()>=2) {leftmove1(); leftmove1();
if(judge())
return 1;
else {
rightmove1(); rightmove1(); return 0;}
}
else
return 0;
}
if(i==9) //<-
( 1)
{
if(num1ofb()>=1) {
leftmove1();
if(judge())
return 1;
else {rightmove1(); return 0;}
}
else
return 0;
}
if(i==10)//<-
(-1)
{
if(num_1ofb()>=1) { leftmove_1();
if(judge())
return 1;
else { rightmove_1();
return 0;}
}
else
return 0;
}
return 0;
}
int main()
{
int m=0;
int k;
initial();
srand( (unsigned)time( NULL ) );
int turn=1;
// 1表示正向 0 表示反向
while(1)
{
if(success()) break;
if(turn) k=rand()%5+1;
else
k=rand()%5+6;
if(move(k))
{
if(judge()==0)
{
if(k<=5)
move(k+5);
else
move(k-5);
}
turn = !turn;
ans[m++]=k; printf("m=%d ",m);printf("k=%d ",k);printfab();
}
}
printf("\n");
return 0;
}