题目描述
魔法世界的历史上曾经出现过一位赫赫有名的不败战神陈庆之,陈庆之以棋道悟兵法,一生身经数百战,没有一场败绩,而且没有一场不是在绝对的劣势中大胜敌军。
受此影响,魔法世界开始流行一种叫棋子移动的游戏,即有2N个棋子(N≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,例如当N=4时,棋子排列情况为:
〇〇〇〇●●●●
移动棋子的规则是:每次必须同时移动相邻两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置.每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。例如当N=4时,最终排列情况为:
〇●〇●〇●〇●
试求出移动步骤。
输入
一个整数,即N。
输出
输出移动步骤,每一步操作占一行。
样例输入
4
样例输出
4,5–>9,10
8,9–>4,5
2,3–>8,9
7,8–>2,3
1,2–>7,8
主要是找规律
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; int fun(int n) { for(int i=n;i>4;i--){ printf("%d,%d-->%d,%d\n",i,i+1,2*i+1,2*i+2); printf("%d,%d-->%d,%d\n",2*i-1,2*i,i,i+1); } return 0; } int main() { int a[5][4]={{4,5,9,10}, {8,9,4,5}, {2,3,8,9}, {7,8,2,3}, {1,2,7,8} }; int n; scanf("%d",&n); fun(n); for(int i=0;i<5;i++) printf("%d,%d-->%d,%d\n",a[i][0],a[i][1],a[i][2],a[i][3]); }