黑白棋子的移动(东方化改题+???)

四季有2n 个棋子(n≥4)排成一行,开始为位置白子所有在左边,黑子所有在右边,如html

下图为n=5 的状况:ios

○○○○○●●●●●编程

移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,能够左移post

也能够右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干spa

个棋子(不能平移)。code

四季要求最后能移成黑白相间的一行棋子。如n=5 时,成为:htm

○●○●○●○●○●blog

因为四季只会判别黑白,不会移动棋子,因此她请求你帮忙编程打印出移动过程。ci

这个题啊就是前面有规律,后面按照样例打表就好了it

下面是个人能过样例可是不知道对不对的题解

 1 #include<cstdio>
 2 using namespace std;
 3 void yidong1(int x,int n)
 4 {
 5     for(int i = 1;i <= x;i++)    printf("o");
 6     for(int i = 1;i <= x;i++)    printf("*");
 7     printf("--");
 8     if(n - x != 0){
 9         for(int i = 1;i <= n - x;i++)    printf("o*");
10     }
11     printf("\n");
12 }
13 void yidong2(int x,int n)
14 {
15     for(int i = 1;i <= x - 1;i++)    printf("o");
16     printf("--");
17     for(int i = 1;i <= x - 1;i++)    printf("*");
18     for(int i = 1;i <= n - x + 1;i++)    printf("o*");
19     printf("\n");
20 }
21 int main()
22 {
23     freopen("chessman.in","r",stdin);
24     freopen("chessman.out","w",stdout);
25     int n,step = 0;
26     scanf("%d",&n);
27     int a = n;
28     while(a >= 4){
29         printf("step %d:",step);
30         yidong1(a,n);
31         step++;
32         printf("step %d:",step);
33         yidong2(a,n);
34         step++;
35         a--;
36     }
37     printf("step %d:",step);
38     printf("ooo*o**--*");
39     if(n - 4 != 0){
40         for(int i = 1;i <= n - 4;i++)    printf("o*");
41     }
42     step++;
43     printf("\nstep %d:",step);
44     printf("o--*o**oo*");
45     if(n - 4 != 0){
46         for(int i = 1;i <= n - 4;i++)    printf("o*");
47     }
48     step++;
49     printf("\nstep %d:",step);
50     printf("o*o*o*--o*");
51     if(n - 4 != 0){
52         for(int i = 1;i <= n - 4;i++)    printf("o*");
53     }
54     step++;
55     printf("\nstep %d:--",step);
56     for(int i = 1;i <= n;i++)    printf("o*");
57     printf("\n");
58     return 0;
59 }

标程给了一个???的作法先贴上来再说别的吧

 1 #include<iostream>
 2 using namespace std;
 3   
 4 int n,st,sp;
 5 char c[101];
 6   
 7 void print()
 8 {
 9     int i;
10     cout<<"step "<<st<<':';
11     for (i=1;i<=2*n+2;i++) cout<<c[i];
12     cout<<endl;
13     st++;
14 }
15   
16 void init(int n)
17 {
18     int i;
19     st=0;
20     sp=2*n+1;
21     for (i=1;i<=n;i++) c[i]='o';
22     for (i=n+1;i<=2*n;i++) c[i]='*';
23     c[2*n+1]='-';c[2*n+2]='-';
24     print();
25 }
26   
27 void move(int k)
28 {
29     int j;
30     for (j=0;j<=1;j++) 
31     {
32        c[sp+j]=c[k+j];
33        c[k+j]='-';
34     }
35     sp=k;
36     print();
37 }
38 void mv(int n)
39 {
40     int i,k;
41     if (n==4)
42     {
43         move(4); move(8); move(2); move(7); move(1);
44         }
45     else
46     {
47         move(n); move(2*n-1); mv(n-1);
48         }
49 }
50 int main()
51 {
52  
53     cin>>n;
54     init(n);
55     mv(n);
56     return 0;
57 }

没了

今天跟ypq讨论各自的老婆的时候gg来了,好气啊

转载于:https://www.cnblogs.com/aristocrat/p/8472290.html