分治3--黑白棋子的移动

一、心得

二、题目和分析

黑白棋子的移动(chessman
【问题描述】
有2n个棋子(n≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为n=5的情形:
○○○○○●●●●●
移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:
○●○●○●○●○●
任务:编程打印出移动过程。
【输入样例】chessman.in
7
【输出样例】chessman.out
step 0:ooooooo*******--
step 1:oooooo--******o*
step 2:oooooo******--o*
step 3:ooooo--*****o*o*
step 4:ooooo*****--o*o*
step 5:oooo--****o*o*o*
step 6:oooo****--o*o*o*
step 7:ooo--***o*o*o*o*
step 8:ooo*o**--*o*o*o*
step 9:o--*o**oo*o*o*o*
step10:o*o*o*--o*o*o*o*
step11:--o*o*o*o*o*o*o*
【算法分析】
我们先从n=4开始试试看,初始时:
○○○○●●●●
第1步:○○○——●●●○●  {—表示空位}
第2步:○○○●○●●——●
第3步:○——●○●●○○●
第4步:○●○●○●——○●
第5步:——○●○●○●○●
如果n=5呢?我们继续尝试,希望看出一些规律,初始时:
○○○○○●●●●●
第1步:○○○○——●●●●○●
第2步:○○○○●●●●——○●
这样,n=5的问题又分解成了n=4的情况,下面只要再做一下n=4的5个步骤就行了。同理,n=6的情况又可以分解成n=5的情况,……,所以,对于一个规模为n的问题,我们很容易地就把他分治成了规模为n-1的相同类型子问题。
刚开始一点思路都没有觉得问题特别复杂,其实根据我做的这一丢丢题看来,步骤或者说是过程描述性强的题目,都有一定的规律,可用递归递推去做。
这样的题一定有一定的规律,如当n=5时,再稍加变动就恢复n=4时的情况,这就是有规律可循了,问题就变得简单;再好比前面汉诺塔的题目,题目会仔细
说明怎样去移动,那就有规律可循了,不多解释了,和这个题情况一样,又会恢复到n-1的状态;(快夸我!QWQ)
初始化--输出--移动n个棋子(函数)--怎样移动(函数)--移动后输出(输出函数)

三、代码和结果

 1 #include <iostream>
 2 using namespace std;
 3
 4 int n;
 5 int step=0;
 6 char ans[101];
 7 int sp;
 8
 9 void print(){
10     cout<<"step"<<step<<":";
11     for(int i=1;i<=2*n+2;i++) cout<<ans[i];
12     cout<<endl;
13     step++;
14 }
15
16 void init(int n){
17     for(int i=1;i<=n;i++) ans[i]='o';
18     for(int i=n+1;i<=2*n;i++) ans[i]='*';
19     for(int i=2*n+1;i<=2*n+2;i++) ans[i]='-';
20     print();
21     sp=2*n+1;
22 }
23
24 void move(int k){
25     for(int i=0;i<=1;i++){
26         ans[sp+i]=ans[k+i];
27         ans[k+i]='-';//
28     }
29     sp=k;
30     print();//
31 }
32
33 void mv(int n){
34     if(n==4){
35         move(4),move(8),move(2),move(7),move(1);
36     }
37     else{
38         move(n),move(2*n-1),mv(n-1);
39     }
40 }
41
42 int main(){
43     cin>>n;
44     init(n);
45     mv(n);
46     return 0;
47 } 

转载于:https://www.cnblogs.com/Renyi-Fan/p/7135800.html

分治3--黑白棋子的移动相关推荐

  1. 分治算法 黑白棋子的移动

    分治算法 黑白棋子的移动 题目: 解析: 题目: 有2n个棋子(n≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为n=5的情形: ○○○○○●●●●● 移动棋子的规则是:每次必须同时 ...

  2. 信息学奥赛一本通(1327:【例7.6】黑白棋子的移动)

    1327:[例7.6]黑白棋子的移动 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 5394     通过数: 2403 [题目描述] 有2n个棋子(n≥4)排成 ...

  3. 分治法 —— 黑白棋子移动

    黑白棋子移动 题目描述 题意解读 Code 结语 题目描述 有2n个棋子(n≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为n=5的情形: ○○○○○●●●●● 移动棋子的规则是:每 ...

  4. [luogu p1259] 黑白棋子的移动

    传送门 黑白棋子的移动 题目描述 有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况: ○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋 ...

  5. 【华为机试题】黑白棋子的最大匹配度

    棋盘上有黑白两种颜色的棋子,选出一对黑白棋子,若黑棋的横坐标小于等于白棋的横坐标,黑棋的纵坐标小于等于白棋的纵坐标,则称这一对棋子为匹配.求任意个数的黑白棋中最佳匹配的对数. 输入: 测试用例数 对每 ...

  6. 信息学奥赛一本通 1327:【例7.6】黑白棋子的移动 | 洛谷 P1259 黑白棋子的移动

    [题目链接] ybt 1327:[例7.6]黑白棋子的移动 洛谷 P1259 黑白棋子的移动 注:两题仅输出要求不同 [题目释义] 开始时,末尾有两个空位可以使用. 棋子移动后,会在原位置留有空位,相 ...

  7. PV操作每日一题-黑白棋子问题(变式)

    黑白棋子问题(变式)⚫⚪ 一.问题描述 二.问题求解 三.碎碎念 一.问题描述 有一个盒子中放有数量相等的黑白棋子各100枚,现在用自动分拣系统将黑白棋子分开,系统中有两个进程P1和P2.P1负责白棋 ...

  8. PV操作每日一题-黑白棋子问题

    黑白棋子问题棋子⚫⚪ 一.问题描述 二.问题求解 三.碎碎念 温馨提示,这个题目的代码可能很简单,但是有点绕,类似于前面的橘子苹果问题的交替放入水果.好啦,开始! 一.问题描述 有一个盒子中放有数量相 ...

  9. matlab显示黑白棋子,围棋—暗藏在黑白棋子中的大智慧 你了解吗?

    文章来源:腾讯少儿围棋 那些暗藏在围棋黑白棋子之间的大智慧,是我们一定不能忽视的.好多家长觉得围棋不适合太小的孩子学,主要有两个原因.第一点就是,觉得围棋的难度过大,对于孩子来说,只能算是一个单纯的娱 ...

  10. 1327:【例7.6】黑白棋子的移动——分治

    [题目描述] 有2n个棋子(n≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为n=5的情形: ○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左 ...

最新文章

  1. 用spss做多组两两相关性分析_两独立样本T检验及如何利用SPSS实现其操作
  2. 数据分析之CE找数据大法
  3. 赚到!4个Python初学者必学的Numpy小技巧
  4. mysql自动提交 dcl语句_MySQL基础:DCL语句总结
  5. intvar mysql_mysql binlog格式解析(一)
  6. springboot前后端分离项目MultipartFile获取前端传的file为null问题
  7. oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint
  8. Linux通过SSH实现免密登录
  9. matlab 工业相机 曝光时间_工业相机与普通相机的差别
  10. Win10电脑如何定时关机
  11. 【BZOJ4818】序列计数(动态规划,生成函数)
  12. 细心整理近50个ARM开发相关的网站和学习资料
  13. ARM CPU Cortex-X3,Cortex-A715,Cortex-A510 | GPU Immortalis-G715
  14. 雷达通信术语中英文对照
  15. 动力节点『lol版』Java学习路线图(五)Java框架阶段
  16. 架构师学习笔记(四)架构师线路之系统架构师企业架构师
  17. 基于spring boot的奖助学金评审系统毕业设计源码031035
  18. Springboot 删除指定文件夹或文件(Java删除指定文件夹或文件)
  19. HDU1799-组合公式变形
  20. linux消息通信无法接收,求助!Linux基于UDP通信失败,server接收不到消息???...

热门文章

  1. VMware Workstation 运行出现“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”解决方案
  2. js防篡改对象之不可扩展对象
  3. [vue-cli] vue-cli中你经常的加载器有哪些?
  4. 前端学习(2689):重读vue电商网站10之表格展开页
  5. 前端学习(1682):前端系列实战课程之让蛇改变方向
  6. 前端学习(1681):前端系列实战课程之让蛇动起来
  7. 前端学习(547):node的系统模块fs
  8. 玩转oracle 11g(39):oracle11g密码过期后的解决方法
  9. Linux 多线程开发-线程的结束pthread_kill和pthread_cancel
  10. STM32项目中一种在线升级/应用升级OTA-IAP设计方案