【题解】【分治】——黑白棋子的移动

news2024/10/28 20:46:33

【题解】【递归】——黑白棋子的移动

  • 黑白棋子的移动
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例
      • 输入 #1
      • 输出 #1
    • 提示
  • 1.题意解析
  • 2.AC代码

黑白棋子的移动

通往洛谷的传送门

题目描述

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

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

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

输入格式

一个整数 n n n

输出格式

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

输入输出样例

输入 #1

7

输出 #1

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*

提示

$ 4\leq n\leq 100$

1.题意解析

    仔细观察,可以发现,移动规模为 n n n的棋子,可以现将中间的两枚o*棋子移到最后,然后将*行的最后两个移到空位上来,形成了规模为 n − 1 n-1 n1的子问题,可以使用递归来解决,具体示例如下:

n=5时:
ooooo*****__
将中间的o*x代替,使演示更为直观。
ooooo*****__
移动步骤一,oooo__****xx
再将x旁边的两个棋子*替换为y
oooo__**yyxx
移动步骤二,ooooyy**__xx
再把字母替换回来:
oooo****__o*
可以发现,前面的 4 ∗ 2 = 8 4*2=8 42=8个格子形成了规模为 5 − 1 = 4 5-1=4 51=4的子问题。

    但是,看看样例 n = 4 n=4 n=4时是特殊情况,也是递归边界。这个时候,我们就直接输出就行了。详见代码。

2.AC代码

#include<bits/stdc++.h>
using namespace std;
int n;
char a[210];//存储棋盘 
void start()//初始化棋盘 
{
	for(int i=1;i<=n;i++)
	    a[i]='o',a[i+n]='*';
	a[2*n+1]=a[2*n+2]='-';
}
void print()//打印棋盘
{
	for(int i=1;i<=n*2+2;i++)
	    cout<<a[i];
	cout<<endl;
}
void move(int x)//移动棋子,x代表当前规模 
{
	if(x==4)//递归边界,x=4时是特殊情况 
	{
        cout<<"ooo--***o*";//第一次移动
        for(int i=1;i<=n-4;i++)cout<<'o'<<'*';//补位
		puts("");//换行
        cout<<"ooo*o**--*";//以此类推 
        for(int i=1;i<=n-4;i++)cout<<'o'<<'*';
		puts("");
        cout<<"o--*o**oo*";
        for(int i=1;i<=n-4;i++)cout<<'o'<<'*';
		puts("");
        cout<<"o*o*o*--o*";
        for(int i=1;i<=n-4;i++)cout<<'o'<<'*';
		puts("");
        cout<<"--o*o*o*o*";
        for(int i=1;i<=n-4;i++)cout<<'o'<<'*';
        return;
	}
	swap(a[x],a[2*x+1]);swap(a[x+1],a[2*x+2]);print();//平常情况的第一步
	swap(a[2*x-1],a[x]);swap(a[2*x],a[x+1]);print();//平常情况的第二步
	move(x-1);//递归处理 
	return;
}
int main()
{
    cin>>n;
    start();
    print();//开始先打印棋盘 
    move(n);//移动棋子 
	return 0;
}

喜欢就订阅此专辑吧!

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2225678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024 前端面试题!!! html css js相关

常见的块元素、行内元素以及行内块元素&#xff0c;三者有何不同&#xff1f;​​​​​​​ HTML、XML、XHTML它们之间有什么区别&#xff1f;​​​​​​​ DOCTYPE(⽂档类型) 的作⽤ Doctype是HTML5的文档声明&#xff0c;通过它可以告诉浏览器&#xff0c;使用哪一个HTM…

Vue学习笔记(八)

透传attribute "透传attribute"指的是传递给一个组件&#xff0c;却没有被改组件声明为props或emits的attribute或者v-on事件监听器。最常见的例子就是class、style和id。 当一个组件以单个元素为根作渲染时&#xff0c;透传的attribute会自动被添加到根元素上。 …

WSGI、uwsgi与uWSGI

WSGI、uwsgi与uWSGI WSGI (web server gateway interface 网络服务网关接口) 只能用于python&#xff0c;是一个接口标准协议&#xff0c;django、flask自带有uwsgi 是WSGI的通信协议uWSGI是实现了uwsgi协议和WSGI服务的web服务器 他们是为了将web服务器与web框架连接起来 N…

《MYSQL 实战45讲》深入浅出ORDER BY底层

慢查询日志这个路径下&#xff0c;但是打不开 内存临时表 现在有一个业务功能是从一个单词表里面随机选出3个单词出来 这个表有10000条数据。 select word from words order by rank() limit 3 使用执行计划查看结果&#xff1a; select_type是SIMPLE表示改查询不包含子查询…

USB Type-C 受电端取电快充协议芯片,支持PD+QC+FCP+SCP+AFC快充协议

前言 随着科技的飞速发展&#xff0c;电子设备对于快速充电的需求日益增加。为了满足这一需求&#xff0c;市场上涌现出了众多快充技术和产品。其中&#xff0c;XSP08Q诱骗取电芯片以其卓越的性能和广泛的应用场景&#xff0c;成为了快充领域的一颗璀璨明星。本文将对XSP08Q P…

边缘计算网关在储能领域的应用-天拓四方

随着全球能源结构的转型和智能电网的快速发展&#xff0c;储能技术已成为推动能源革命的关键技术之一。在储能系统中&#xff0c;边缘计算网关作为一种新型的网络设备&#xff0c;发挥着至关重要的作用。 一、边缘计算网关在储能领域的应用 1、实时监控与控制 储能系统是一个…

hf_transformers-Quantization

bitsandbytes BitSandbytes 是将模型量化为 8 位和 4 位的最简单选项。8 位量化将 FP16 中的异常值与 INT8 中的非异常值相乘&#xff0c;将非异常值转换回 FP16&#xff0c;然后将它们相加以返回 FP16 中的权重。这减少了离群值对模型性能的降级影响。4 位量化进一步压缩模型…

【小白学机器学习22】 多变量分析:相关性分析,多变量回归,最小二乘法 ols等

目录 1 概念名词&#xff1a; 1.1 双变量分析与单因素分析 1.2 变化 1.3 共变 和 相关分析 Correlation analysis 1.4 回归分析 Regression analysis 1.5 相干和相关 1.5.1 相干relevant 1.5.2 相关Correlation 2 双变量分析 3 相关分析 3.1 是否相关 3.2 相关的…

Ping32为何是理想的加密工具?十大核心功能保障您的数据安全

在当今数字化时代&#xff0c;数据安全已成为企业和个人面临的重大挑战。随着信息泄露事件的频繁发生&#xff0c;选择一款可靠的加密工具至关重要。Ping32 作为一款备受赞誉的加密软件&#xff0c;以其十大核心功能&#xff0c;成为保障数据安全的理想选择。 一、强大的加密算…

React第十一章(useReducer)

useReducer useReducer是React提供的一个高级Hook,没有它我们也可以正常开发&#xff0c;但是useReducer可以使我们的代码具有更好的可读性&#xff0c;可维护性。 useReducer 跟 useState 一样的都是帮我们管理组件的状态的&#xff0c;但是呢与useState不同的是 useReducer…

JsonCpp库学习记录

使用源码的方式 到JsonCpp的开源库仓库下载最新的发行版本 解压压缩包 使用Python生成源码文件 在本路径下cmd打开控制台&#xff0c;使用python编译&#xff08;前提是python环境已安装&#xff09; python amalgamate.py 生成dist文件夹 jsoncpp为整合在一起的源码&#…

vue 解决:npm ERR! code ERESOLVE 及 npm ERR! ERESOLVE could not resolve 的方案

1、问题描述&#xff1a; 其一、需求为&#xff1a; 想要安装项目所需依赖&#xff0c;成功运行 vue 项目&#xff0c;想要在浏览器中能成功访问项目地址 其二、问题描述为&#xff1a; 在 package.json 文件打开终端平台&#xff0c;通过执行 npm install 命令&#xff0c…

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站&#xff0c;并向其发送虚假插件&#xff0c;通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种&#xff0c;自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…

QT 机器视觉 1.相机类型

本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景 更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员&#xff0c;希望了解2D、3D相机视觉相关操作…

【问题解决】pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

今天配置完poetry环境变量之后pnpm不能用了 具体报错 pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1pnpm run dev~~~~ Ca…

【加密系统】华企盾DSC服务台提示:请升级服务器,否则可能导致客户端退回到旧服务器的版本

华企盾DSC服务台提示&#xff1a;请升级服务器&#xff0c;否则可能导致客户端退回到旧服务器的版本 产生的原因&#xff1a;控制台版本比服务器高导致控制台出现报错 解决方案 方法&#xff1a;将控制台回退到原来的使用版本&#xff0c;在控制台负载均衡查看连接该服务器各个…

若依框架部署到服务器后头像资源访问404

排错过程 第一开始以为是代理出问题了 官网给出的解决方案 第一种是用代理后端接口&#xff0c;第二种是重写路径直接访问静态文件 接口通过捕获profile开头的路径/profile/avatar…&#xff0c;转为/home…/avatar找到我们在该路径下的文件 但是我想了一下&#xff0c;我ngin…

基于Flink搭建流式湖仓OpenLake方案

OpenLake解决方案建立在开放可控的OpenLake湖仓之上&#xff0c;提供大数据搜索与AI一体化服务。通过元数据管理平台DLF管理结构化、半结构化和非结构化数据&#xff0c;提供湖仓数据表和文件的安全访问及IO加速&#xff0c;并支持大数据、搜索和AI多引擎对接。本文为您介绍以F…

windows下使用nvm进行多版本nodejs管理

目录 一&#xff1a;背景 二&#xff1a;nvm的介绍 三&#xff1a;环境切换使用 一&#xff1a;背景 最近在开发node js的项目&#xff0c;其中一个项目的前端和后台使用了两个node版本&#xff0c;因此需要不同的环境配置来进行开发任务&#xff0c;刚好nvm这个插件可以实现…

探索三维世界的奥秘:如何在Cesium中实现惊艳的双面渲染效果

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…