四季有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来了,好气啊