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

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

下图为n=5 的情况:

○○○○○●●●●●

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

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

个棋子(不能平移)。

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

○●○●○●○●○●

由于四季只会判别黑白,不会移动棋子,所以她请求你帮忙编程打印出移动过程。

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

下面是我的能过样例但是不知道对不对的题解

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值