Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
2228 | 大聪明 | 黑白棋子的移动 | C++ | 通过 | 100 | 0 MS | 256 KB | 814 | 2019-11-13 18:45:08 |
#include<iostream> #include<cstdio> #include<cmath> using namespace std; char a[101]; int sp,step=0,n; void print()//输出 { printf("step%2d:",step); for(int i=0;i<2*n+2;i++) printf("%c",a[i]); printf("\n"); step++; } void move(int k)//分治:移动 { int j; for(j=0;j<2;j++) { a[sp+j]=a[k+j-1]; a[k+j-1]='-'; } sp=k-1; print(); } void mv(int n)//递归求解 { int i,k; if(n==4) { move(4);move(8);move(2);move(7);move(1); } else { move(n);move(n*2-1);mv(n-1); } } int main() { int i; scanf("%d",&n); for(i=0;i<n;i++) a[i]='o'; for(i=n;i<2*n;i++) a[i]='*'; a[2*n]='-';a[2*n+1]='-'; sp=2*n;//初始化 print(); mv(n); return 0; }