zoukankan      html  css  js  c++  java
  • 黑白棋子的移动(东方化改题+???)

    四季有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("
    ");
    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("
    ");
    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("
    step %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("
    step %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("
    step %d:--",step);
    56     for(int i = 1;i <= n;i++)    printf("o*");
    57     printf("
    ");
    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来了,好气啊

  • 相关阅读:
    Python——极限编程
    RPC是什么?科普一下
    缓存在高并发场景下的常见问题
    如何提高缓存命中率
    数据库性能优化的误区
    缓存在大型网站架构中的应用
    APP多版本共存,服务端如何兼容?
    水平分库分表的关键问题及解决思路
    分库分表的几种常见玩法及如何解决跨库查询等问题
    分布式系统事务一致性解决方案
  • 原文地址:https://www.cnblogs.com/aristocrat/p/8472290.html
Copyright © 2011-2022 走看看