关于这个~~
9个钟表的指针0-4的数,
9个状态进行for循环
遍历每个状态
每个操作不会超过四次,四次之后就重头开始了
贴代码~~
post code:
#include<stdio.h>
#include<string.h>
int clock[10];
int original[10];
int rec[10];
char ch[10][20]={"ABDE","ABC","BCEF","ADG","BDEFH","CFI","DEGH","GHI","EFHI"};
void change(int k,int num)
{
int i,j,len;
k=k-1;
len=strlen(ch[k]);
for(i=1;i<=num;i++){
for(j=0;j<len;j++)
clock[ch[k][j]-'A'+1]=(clock[ch[k][j]-'A'+1]+1)%4;
}
}
void ori(){
int i;
for(i=1;i<=9;i++)
clock[i]=original[i];
}
int fun(int a,int b,int c,int d,int e,int f,int g,int h,int i){
int k;
change(1,a);
change(2,b);
change(3,c);
change(4,d);
change(5,e);
change(6,f);
change(7,g);
change(8,h);
change(9,i);
int sum=0;
for(k=1;k<=9;k++)
sum+=clock[k];
if(sum==0)return 1;
else return 0;
}
int main()
{
while(scanf("%d",&clock[1])!=EOF){
int a,b,c,d,e,f,g,h,i,sum=0,min=999999;
original[1]=clock[1];
for(i=2;i<=9;i++){
scanf("%d",&clock[i]);
original[i]=clock[i];
}
// for(i=1;i<=9;i++)
// printf("%d ",clock[i]);
// printf("\n");
for(a=0;a<4;a++){ //9重for循环 枚举每种操作的次数
for(b=0;b<4;b++){
for(c=0;c<4;c++){
for(d=0;d<4;d++){
for(e=0;e<4;e++){
for(f=0;f<4;f++){
for(g=0;g<4;g++){
for(h=0;h<4;h++){
for(i=0;i<4;i++){
sum=a+b+c+d+e+f+g+h+i;
if(min<sum)continue;
ori();
if(fun(a,b,c,d,e,f,g,h,i)==1){
if(min>sum){
min=sum;
rec[1]=a;
rec[2]=b;
rec[3]=c;
rec[4]=d;
rec[5]=e;
rec[6]=f;
rec[7]=g;
rec[8]=h;
rec[9]=i;
}
}
}
}
}
}
}
}
}
}
}
int x;
for(x=1;x<=9;x++)
if(rec[x]!=0){
rec[x]--;
printf("%d",x);
break;
}
x=1;
while(x!=10){
while(rec[x]!=0){
printf(" %d",x);
rec[x]--;
}
x++;
}
printf("\n");
}
}