#include<stdio.h>
#include<math.h>
main()
{
int a,b,c,d,p,n=44,i,k;
//a,b,c,d作为123交换用 ,n为盘数
//p表示总步数,i为往上回朔的次数,k为这个盘子的位置很重要
for(p=1;p<=pow(2,n)-1;p++){
k=p;
a=1;
b=2;
c=3;
// 向上回朔的循环
for(i=1;i<=n-1;i++){
//作变换
switch(k%4){
case 3:
d=b;
b=a;
a=d;
break;
case 1:
d=c;
c=b;
b=d;
break;
default:
break;
}
k=k/2+k%4%3%2; //向上一次位子的变换
}
// 打印有些麻烦 要打印是1的字母到是3的字母
if(a==1){
if(b==2)
printf("a-c\t");
else
printf("a-b\t");
}
else{
if(a==2){
if(b==3)
printf("c-b\t");
else
printf("b-c\t");
}
else{
if(b==1)
printf("b-a\t");
else
printf("c-a\t");
}
}
}
return 0;
}
#include<math.h>
main()
{
int a,b,c,d,p,n=44,i,k;
//a,b,c,d作为123交换用 ,n为盘数
//p表示总步数,i为往上回朔的次数,k为这个盘子的位置很重要
for(p=1;p<=pow(2,n)-1;p++){
k=p;
a=1;
b=2;
c=3;
// 向上回朔的循环
for(i=1;i<=n-1;i++){
//作变换
switch(k%4){
case 3:
d=b;
b=a;
a=d;
break;
case 1:
d=c;
c=b;
b=d;
break;
default:
break;
}
k=k/2+k%4%3%2; //向上一次位子的变换
}
// 打印有些麻烦 要打印是1的字母到是3的字母
if(a==1){
if(b==2)
printf("a-c\t");
else
printf("a-b\t");
}
else{
if(a==2){
if(b==3)
printf("c-b\t");
else
printf("b-c\t");
}
else{
if(b==1)
printf("b-a\t");
else
printf("c-a\t");
}
}
}
return 0;
}