黑白棋子的移動(東方化改題+???)

四季有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