这道题比较难
题目描述:
有2n个棋子(n≥4)排成一行,开始位置为白色全部在左边,黑色全部在右边。(其中字母O表示白色棋子,字母X表示黑色棋子)OOOOXXXX。移动棋子的规则是:每次必须同时移动相邻两个棋子,颜色不限,可以左移也可以右移一空位上去,但不能调换两个棋子的左右位,每次移动必须跳过若干个棋子(不能平移),要求最后能够移成黑白相间的一行棋子。例如当n=4时,最终排列情况为:OXOXOXOX。输出棋子移动的过程。
输入描述:
多组输入,每组一个正整数,占一行。
输出描述:
输出移动步骤,每一步操作占一行
样例输入:
4
样例输出:
4,5–>9,10
8,9–>4,5
2,3–>8,9
7,8–>2,3
1,2–>7,8
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 int n,mj,mi,x,y; 6 char a[101]; 7 void move(int i) 8 { 9 a[mj] = a[i]; 10 a[mj + 1] = a[i + 1]; 11 a[i] = '-'; 12 a[i + 1] = '-'; 13 mj = i; 14 for(i = 0; i < 2 * n + 2; i++) 15 //printf("%c", a[i]); 16 if(a[i]=='-'){ 17 cout<<i+1<<","<<i+2<<"-->"<<x<<","<<y; 18 x=i+1; 19 y=i+2; 20 break; 21 } 22 printf("\n"); 23 } 24 void fun(int n) 25 { 26 if (n == 4){ 27 move(3);move(7); 28 move(1);move(6); 29 move(0); 30 } 31 else{ 32 move(n - 1); 33 move(2 * n - 2); 34 fun(n - 1); 35 } 36 } 37 int main() 38 { 39 int i, j; 40 while(cin>>n){ 41 mi = 1; 42 mj = 2* n; 43 for(i = 0; i < n; i++) 44 a[i] = 'o'; 45 46 for(i = n; i < 2 * n; i++) 47 a[i] = '*'; 48 a[2*n] = '-'; 49 a[2*n + 1] = '-'; 50 x=2*n+1; 51 y=2*n+2; 52 fun(n); 53 } 54 return 0; 55 }
signal
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 int n, mj; 6 int mi; 7 char a[101]; 8 void move(int i) 9 {10 a[mj] = a[i];11 a[mj + 1] = a[i + 1];12 a[i] = '-';13 a[i + 1] = '-';14 mj = i;15 printf("step%2d:", mi++);16 for(i = 0; i < 2 * n + 2; i++)17 printf("%c", a[i]);18 printf("\n");19 }20 void fun(int n)21 {22 if (n == 4){ 23 move(3);move(7); 24 move(1);move(6);25 move(0);26 }27 else{28 move(n - 1);29 move(2 * n - 2);30 fun(n - 1);31 }32 }33 int main()34 {35 int i, j;36 scanf("%d", &n);37 mi = 1;38 mj = 2* n;39 for(i = 0; i < n; i++)40 a[i] = 'o';41 42 for(i = n; i < 2 * n; i++)43 a[i] = '*';44 45 a[2*n] = '-';46 a[2*n + 1] = '-';47 printf("step%2d:", 0);48 for(i = 0; i < 2 * n + 2; i++)49 printf("%c", a[i]);50 puts("");51 fun(n);52 return 0;53 }
转载请标明出处
今天的文章棋子移动的游戏_棋子移动的游戏分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/51045.html