当前位置: 首页 > news >正文

题解:洛谷 P1259 黑白棋子的移动

【题目来源】

洛谷:P1259 黑白棋子的移动 - 洛谷 (luogu.com.cn)

【题目描述】

\(2n\) 个棋子排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为 \(n=5\) 的情况:

image

移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如 \(n=5\) 时,成为:

image

任务:编程打印出移动过程。

【输入】

一个整数 \(n\)

【输出】

若干行,表示初始状态和每次移动的状态,用 o 表示白子,* 表示黑子,- 表示空行。

【输入样例】

7

【输入样例】

ooooooo*******--
oooooo--******o*
oooooo******--o*
ooooo--*****o*o*
ooooo*****--o*o*
oooo--****o*o*o*
oooo****--o*o*o*
ooo--***o*o*o*o*
ooo*o**--*o*o*o*
o--*o**oo*o*o*o*
o*o*o*--o*o*o*o*
--o*o*o*o*o*o*o*

【解题思路】

image

【算法标签】

《洛谷 P1259 黑白棋子的移动》 #递归# #Special judge#

【代码详解】

#include <iostream>
using namespace std;int n;              // 初始'o'和'*'的数量(各n个)
char a[205];        // 存储当前排列状态的数组
string b[4] = {     // 预定义的4种特殊排列模式"ooo*o**--", "o--*o**oo", "o*o*o*--o", "--o*o*o*o"
};// 输出数组从l到r的部分
void shuchu(int l, int r) 
{for (int i = l; i <= r; i++) cout << a[i];cout << endl;
}// 递归处理排列变换
void f(int step) 
{// 终止条件:当step减到3时使用预定义模式if (step == 3) {for (int i = 0; i < 4; i++) {cout << b[i];          // 输出预定义模式shuchu(10, 2*n+2);     // 输出剩余部分}return;}// 输出当前状态shuchu(1, 2*n+2);// 执行交换操作1:移动两个'o'到右侧swap(a[step], a[step*2+1]);swap(a[step+1], a[step*2+2]);shuchu(1, 2*n+2);  // 输出交换后的状态// 执行交换操作2:移动两个'*'到左侧swap(a[step], a[step*2-1]);swap(a[step+1], a[step*2]);// 递归处理下一步f(step-1);
}int main() 
{cin >> n;// 初始化数组:前n个'o',接着n个'*',最后两个'-'for (int i = 1; i <= n; i++) {a[i] = 'o';a[i+n] = '*';}a[2*n+1] = '-';a[2*n+2] = '-';// 从n开始递归处理f(n);return 0;
}

【运行结果】

7
ooooooo*******--
oooooo--******o*
oooooo******--o*
ooooo--*****o*o*
ooooo*****--o*o*
oooo--****o*o*o*
oooo****--o*o*o*
ooo--***o*o*o*o*
ooo*o**--*o*o*o*
o--*o**oo*o*o*o*
o*o*o*--o*o*o*o*
--o*o*o*o*o*o*o*
http://www.jsqmd.com/news/389958/

相关文章:

  • 完整教程:CI/CD 核心原则 + 制品管理全解析:落地要求 + 存储方案
  • 题解:洛谷 P3612 [USACO17JAN] Secret Cow Code S
  • 题解:洛谷 P1498 南蛮图腾
  • 题解:洛谷 P1228 地毯填补问题
  • 探索CNN - BILSTM - Attention多特征分类预测:Matlab实现与分析
  • 实测才敢推!更贴合研究生需求的降AIGC软件 千笔·专业降AI率智能体 VS 灵感风暴AI
  • 真的太省时间! 降AIGC工具 千笔·专业降AI率智能体 VS 学术猹 本科生专属
  • 题解:洛谷 P1990 覆盖墙壁
  • 写作小白救星:AI论文工具 千笔AI VS Checkjie,专科生专属神器!
  • 生产环境【Kotlin系列15】多平台开发实战:一次编写,多端运行最佳实践与性能优化
  • 关闭Edge浏览器的“两指在触控板上往左滑是后退;往右划是前进”
  • 【日语学习-日语知识点小记-日本語体系構造-JLPT-N2前期阶段-第一阶段(13):単語文法】
  • 题解:洛谷 P2437 蜜蜂路线
  • 题解:洛谷 P1928 外星密码
  • 题解:洛谷 P1164 小A点菜
  • 深入解析:Hologres Dynamic Table 在淘天价格力的业务实践
  • 题解:洛谷 P1464 Function
  • 标准 Hough 变换、修正 Hough 变换和序列 Hough 变换三种典型航迹起始算法研究附Matlab代码
  • 交稿前一晚!8个降AIGC工具测评:自考降AI率必备攻略
  • 差分进化算法(DE)与缩放因子自适应差分进化(SHADE)在CEC2005函数寻优中的性能研究附Matlab代码
  • 这次终于选对!8个AI论文平台测评:本科生毕业论文写作必备工具推荐
  • WOA-SVM时序预测模型研究——基于鲸鱼优化算法的支持向量机时序预测方法附Matlab代码
  • 表贴式PMSM的直接转矩控制(DTC)仿真模型附Simulink仿真
  • 比较CVaR最优投资组合与均值-方差投资组合以及其他模型,包括全局最小方差(GMVP)和市场投资组合附Matlab代码
  • 这次终于选对!8个一键生成论文工具:自考毕业论文+开题报告高效写作测评
  • 题解:洛谷 P1028 [NOIP 2001 普及组] 数的计算
  • 2026年IEEE IOTJ SCI2区TOP,面向关键节点感知的灾害区域无人机集群路径规划,深度解析+性能实测
  • 2026年上班族香港优才靠谱品牌指南:从政策落地到全周期服务对比 - 速递信息
  • 采用单极表面电荷密度方法数值计算长且均匀磁化圆柱体极尖间气隙的磁场,并与类似点磁单极的近似方法进行比较附Matlab代码
  • 题解:洛谷 P1044 [NOIP 2003 普及组] 栈