洛谷P1498 南蛮图腾[递归好题]

news2024/9/23 13:16:11

南蛮图腾

题目背景

自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?

题目描述

给定一个正整数 n n n,参考输出样例,输出图形。

输入格式

每个数据输入一个正整数 n n n,表示图腾的大小(此大小非彼大小)

输出格式

这个大小的图腾

样例 #1

样例输入 #1

2

样例输出 #1

   /\
  /__\
 /\  /\
/__\/__\

样例 #2

样例输入 #2

3

样例输出 #2

       /\
      /__\
     /\  /\
    /__\/__\
   /\      /\
  /__\    /__\
 /\  /\  /\  /\
/__\/__\/__\/__\

提示

数据保证, 1 ≤ n ≤ 10 1 \leq n \leq 10 1n10

观察数据:得到图新的大小

n=1,2 x 4 大小
n=2,4 x 8 大小
n=3,8 x 16大小
n=m时,pow(2,m) x 2*pow(2,m)大小 

首先初始化数组的大小全为空格
接下来为大家写一个递归函数dfs进行细节简述:

void dfs(int x, int y, int n)//坐标和递归层数
{
	if (n == 1)//层数到1的时候直接存放图腾
	{
		w[x][y] = '/';
		w[x][y + 1] = '\\';//注意这里‘\’是不合法的要前面加一个'\'
		w[x+1][y-1]='/';
		w[x + 1][y + 2] = '\\';
		w[x + 1][y] = '_';
		w[x + 1][y + 1] = '_';
		return;
	}
	dfs(x, y, n - 1);//处理本部
	dfs(x + pow(2, n - 1), y - pow(2, n - 1), n - 1);//向左下边填充
	dfs(x + pow(2, n - 1), y + pow(2, n - 1), n - 1);//向右下填充
}

完整代码如下:

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
char w[20005][20005];//图
void dfs(int x, int y, int n)//坐标和递归层数
{
	if (n == 1)//层数到1的时候直接存放图腾
	{
		w[x][y] = '/';
		w[x][y + 1] = '\\';//注意这里‘\’是不合法的要前面加一个'\'
		w[x+1][y-1]='/';
		w[x + 1][y + 2] = '\\';
		w[x + 1][y] = '_';
		w[x + 1][y + 1] = '_';
		return;
	}
	dfs(x, y, n - 1);//处理本部
	dfs(x + pow(2, n - 1), y - pow(2, n - 1), n - 1);//向左下边填充
	dfs(x + pow(2, n - 1), y + pow(2, n - 1), n - 1);//向右下填充
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	
	for (int i = 1; i <= pow(2, n); i++)
		for (int j = 1; j <= 2 * pow(2,n); j++)
			w[i][j] = ' ';
	dfs(1,pow(2,n),n);//从第一行的中间位置开搜
	for (int i = 1; i <= pow(2, n); i++) {
		for (int j = 1; j <= 2 * pow(2, n); j++)
		{
			cout << w[i][j];
		}
		cout << '\n';
	}
	return 0;
}

AC记录:
在这里插入图片描述

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

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

相关文章

鼠标哪款好用?2024年选这几款鼠标不会出错

鼠标可是我们电脑的好伙伴&#xff0c;它能大大提高我们的工作效率。现在&#xff0c;无线鼠标变得越来越受欢迎&#xff0c;因为没有乱七八糟的线缆&#xff0c;用起来既方便又省空间。对于爱玩游戏的朋友们来说&#xff0c;挑选一个称心如意的鼠标可是件头疼的事。别急&#…

蓝牙控制小车

demo.main.c motor.c uart.c motor.h uart.h 实物图

c++:面向对象的继承特性

什么是继承 (1)继承是C源生支持的一种语法特性&#xff0c;是C面向对象的一种表现 (2)继承特性可以让派生类“瞬间”拥有基类的所有&#xff08;当然还得考虑权限&#xff09;属性和方法 (3)继承特性本质上是为了代码复用 (4)类在C编译器的内部可以理解为结构体&#xff0c;派…

初学SpringMVC之 RestFul 风格、重定向和转发

RestFul 风格改变 URL 形式 比如之前是&#xff1a;http://localhost:8080/add?a1&b2 现在是&#xff1a;http://localhost:8080/add/a/b&#xff08;全是斜杠&#xff09; package com.demo.controller;import org.springframework.stereotype.Controller; import org…

鸿蒙系统创建签名文件及使用创建签名文件打包并安装

* 第一步 第二步&#xff1a;创建.p12文件&#xff0c;点击New如果有的话就Choose Existing 填好下面信息 点击Next进入到下面界面 开始生成csr文件如下图 点击OK–>Finish 文件保存在了下面目录 第三步 1.访问华为开发者平台&#xff0c;登录开发者账号&#xff0c;进…

应急响应-ELK日志分析系统

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

昇思25天学习打卡营第15天|基于 MindSpore 实现 BERT 对话情绪识别

文章目录 昇思MindSpore应用实践1、基于 MindSpore 实现 BERT 对话情绪识别BERT 模型简介数据集数据加载和数据预处理 2、模型训练模型验证 3、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 1、基于 MindSpore 实现 BERT…

尚品汇-(十六)

商品详情功能开发 &#xff08;1&#xff09;搭建service-item 点击service&#xff0c;选择New–>Module,操作如下 修改配置pom.xml 添加配置文件bootstrap.properties spring.application.nameservice-item spring.profiles.activedev spring.cloud.nacos.discovery.se…

centOS79中安装nginx12.15

##red## &#x1f534; 大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff0c;雄雄的小课堂。 前言 装了这么多&#xff0c;发现Nginx是最简单的&#xff0c;一次性就搞定了。下面我们来看看如何安装 安装Nginx 安装gcc-c编译器 分开运行&#xff1a; yum…

医疗机器人中的具身智能进展——自主超声策略模型的任务编码和局部探索

医疗机器人一直是具身智能的研究热点。医学图像、医疗触诊、血压血氧、心率脉搏和生物电信号等多模态生物医学信息&#xff0c;不断丰富着医疗机器人的感知范畴。 自主超声 “自主超声”属于具身智能医疗机器人领域中话题度较高的研究方向。作为临床检查的重要手段之一&#…

27. 738.单调递增的数字,968.监控二叉树,贪心算法总结

class Solution { public:int monotoneIncreasingDigits(int n) {string strNum to_string(n);// flag用来标记赋值9从哪里开始// 设置为这个默认值&#xff0c;为了防止第二个for循环在flag没有被赋值的情况下执行int flag strNum.size();for(int i strNum.size() - 1; i &…

FOLANNIC FD31 UPS工作原理介绍

1&#xff0e;1简介 FOLANNIC FD31系列UPS系工业级电厂型不间断电源&#xff0c;是为重要负载提供不受电网干扰、稳压、稳频的电力供应的电源设备&#xff0c;在市电掉电后&#xff0c;UPS可给负载继续提供一段时间供电&#xff0c;此系列UPS采用带输出隔离变压器的高频双变换结…

多头注意力的公式理解

多头注意力 (Multihead Attention) 多头注意力是一种通过并行使用多个注意力机制来增强模型能力的方法。每个注意力机制被称为一个“头”&#xff08;head&#xff09;。这种机制使得模型可以在不同的子空间中并行计算注意力&#xff0c;从而捕捉输入数据中不同范围的依赖关系…

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int fun main(args: Array<String>) {var any1: Any?any1 nullval n1 any1 as? Int ?: -2024println(n1)kotlin.runCatching {var any2: Any?any2 nullval n2 any2 as Intprintln(…

【Linux】IP地址与主机名

文章目录 1.IP地址2.特殊IP地址3.主机名4.域名解析 1.IP地址 每一台联网的电脑都会有一个地址&#xff0c;用于和其它计算机进行通讯 IP地址主要有2个版本&#xff0c;V4版本和V6版本 IPv4版本的地址格式是&#xff1a;a.b.c.d,其中abcd表示0~255的数字&#xff0c;如192.168.…

论文翻译 | (TAKE A STEP BACK) 后退一步:在大型语言模型中通过抽象来调用推理

摘要 我们介绍了STEP-BACK提示&#xff0c;这是一种简单的提示技术&#xff0c;使LLM能够进行抽象&#xff0c;从而从包含特定细节的实例中派生高级概念和第一原则。使用概念和原则来指导推理&#xff0c;LLM显着提高了他们遵循正确推理路径的能力。我们使用PaLM-2L、GPT-4和Ll…

Linux:进程池制作(基于匿名管道和命名管道两个版本)

Linux&#xff1a;进程池制作 & 匿名管道 & 命名管道 前言一、匿名管道制作进程池一、进程池框架二、创建管道、创建进程、工作进程执行任务2.1 创建管道、创建进程 2.2 工作进程执行任务三、主进程向子进程发送任务3.1 任务封装3.2 主进程向子进程发送任务 四、回收资…

昇思Mindspore25天学习打卡Day21:Diffusion扩散模型

昇思Mindspore25天学习打卡Day21&#xff1a;Diffusion扩散模型 1 模型简介1.1 什么是Diffusion1.2 扩散模型实现原理1.2.1 Diffusion前向过程1.2.2 Diffusion逆向过程1.2.3 U-Net神经网络预测噪声 2 构建Diffusion模型2.1 位置向量2.2 ResNet/ConvNeXT块2.3 Attention模块2.4 …

JVM原理(二三):JVM虚拟机线程安全的实现方法

1. 互斥同步 互斥同步(MutualExclusion&Synchronization)是一种最常见也是最主要的并发正确性保障手段。同步是指在多个线程并发访问共享数据时&#xff0c;保证共享数据在同一个时刻只被一条(或者是一些&#xff0c;当使用信号量的时候)线程使用。而互斥是实现同步的一种…

防御---001

一、实验拓扑二、要求 1&#xff0c;DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00 - 18:00)可以访问&#xff0c;生产区的的设备全天可以访问. 2&#xff0c;生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允许访问DMZ…