【NOIP普及组】 FBI树

news2024/12/23 13:58:06

【NOIP普及组】 FBI树

      • C语言版本
      • C++ 版本
      • Java版本
      • Python版本


💐The Begin💐点点关注,收藏不迷路💐

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。

FBI树是一种二叉树[1],它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:

1)T的根结点为R,其类型与串S的类型相同;
2)若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。

现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历[2]序列。

输入

第一行是一个整数N(0 <= N <= 10),第二行是一个长度为2N的“01”串。

输出

输出一行只包含一个字符串,即FBI树的后序遍历序列。

样例输入

3
10001011

样例输出

IBFBBBFIBFIIIFF

C语言版本

#include <stdio.h>
#include <string.h>

// 判断字符串是否全为指定字符
int isAllSame(char *str, char ch) {
    int i;
    int len = strlen(str);

    for (i = 0; i < len; i++) {
        if (str[i]!= ch) {
            return 0;
        }
    }

    return 1;
}

// 计算FBI类型
char fbi(char *str) {
    int len = strlen(str);

    // 如果字符串长度大于1,递归处理子串
    if (len > 1) {
        char leftStr[len / 2 + 1];
        char rightStr[len - len / 2 + 1];

        strncpy(leftStr, str, len / 2);
        leftStr[len / 2] = '\0';

        strncpy(rightStr, str + len / 2, len - len / 2);
        rightStr[len - len / 2] = '\0';

        printf("%c", fbi(leftStr));
        printf("%c", fbi(rightStr));
    }

    // 判断字符串是否全为0
    if (isAllSame(str, '0')) {
        return 'B';
    }
    // 判断字符串是否全为1
    else if (isAllSame(str, '1')) {
        return 'I';
    }

    return 'F';
}

int main() {
    int n; // n:输入的整数N,表示后续输入字符串的长度相关信息
    scanf("%d", &n);

    char s[1024]; // s:存储输入的字符串
    scanf("%s", s);

    printf("%c", fbi(s));

    return 0;
}

C++ 版本

#include <iostream>
#include <string>

// 判断字符串是否全为指定字符
bool isAllSame(const std::string &str, char ch) {
    for (char c : str) {
        if (c!= ch) {
            return false;
        }
    }

    return true;
}

// 计算FBI类型
char fbi(const std::string &str) {
    int len = str.length();

    // 如果字符串长度大于1,递归处理子串
    if (len > 1) {
        std::string leftStr = str.substr(0, len / 2);
        std::string rightStr = str.substr(len / 2);

        std::cout << fbi(leftStr);
        std::cout << fbi(rightStr);
    }

    // 判断字符串是否全为0
    if (isAllSame(str, '0')) {
        return 'B';
    }
    // 判断字符串是否全为1
    else if (isAllSame(str, '1')) {
        return 'I';
    }

    return 'F';
}

int main() {
    int n; // n:输入的整数N,表示后续输入字符串的长度相关信息
    std::cin >> n;

    std::string s; // s:存储输入的字符串
    std::cin >> s;

    std::cout << fbi(s) << std::endl;

    return 0;
}

Java版本

import java.util.Scanner;

class Main {

    // 判断字符串是否全为指定字符
    static boolean isAllSame(String str, char ch) {
        // 遍历字符串中的每个字符
        for (int i = 0; i < str.length(); i++) {
            // 如果有任何一个字符与指定字符不同,返回false
            if (str.charAt(i)!= ch) {
                return false;
            }
        }
        // 如果所有字符都与指定字符相同,返回true
        return true;
    }

    // 计算FBI类型
    static char fbi(String str) {
        int len = str.length();

        // 如果字符串长度大于1,递归处理子串
        if (len > 1) {
            String leftStr = str.substring(0, len / 2);
            String rightStr = str.substring(len / 2);

            // 先递归处理左子串并输出结果
            System.out.print(fbi(leftStr));
            // 再递归处理右子串并输出结果
            System.out.print(fbi(rightStr));
        }

        // 判断字符串是否全为0
        if (isAllSame(str, '0')) {
            return 'B';
        }
        // 判断字符串是否全为1
        else if (isAllSame(str, '1')) {
            return 'I';
        }

        return 'F';
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n; // n:输入的整数N,表示后续输入字符串的长度相关信息
        n = scanner.nextInt();

        String s = scanner.next(); // s:存储输入的字符串

        System.out.println(fbi(s));

        // 关闭Scanner,释放资源
        scanner.close();
    }
}

Python版本

#  Python 3 风格的 print 函数
from __future__ import print_function

def fbi(s):
    length = len(s)

    # 如果字符串长度大于1,递归处理子串
    if length > 1:
        left_str = s[:length // 2]
        right_str = s[length // 2:]

        print(fbi(left_str), end='')
        print(fbi(right_str), end='')

    # 判断字符串是否全为0
    if all(char == '0' for char in s):
        return 'B'
    # 判断字符串是否全为1
    elif all(char == '1' for char in s):
        return 'I'

    return 'F'

n = int(input())  # n:输入的整数N,表示后续输入字符串的长度相关信息
s = input()  # s:存储输入的字符串

print(fbi(s), end='')

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

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

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

相关文章

Lucene的概述与应用场景(1)

文章目录 第1章 Lucene概述1.1 搜索的实现方案1.1.1 传统实现方案1.1.2 Lucene实现方案 1.2 数据查询方法1.1.1 顺序扫描法1.1.2 倒排索引法 1.3 Lucene相关概念1.3.1 文档对象1.3.2 域对象1&#xff09;分词2&#xff09;索引3&#xff09;存储 1.3.3 常用的Field种类 1.4 分词…

不适合的学习方法

文章目录 不适合的学习方法1. 纯粹死记硬背2. 过度依赖单一资料3. 线性学习4. 被动学习5. 一次性学习6. 忽视实践7. 缺乏目标导向8. 过度依赖技术9. 忽视个人学习风格10. 过于频繁的切换 结论 以下是关于不适合的学习方法的更详细描述&#xff0c;包括额外的内容和相关公式&…

华为OD机试真题(Python/JS/C/C++)- 考点 - 细节

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题 点这里。 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。

Linux中使用NGINX

NGINX简介 Nginx&#xff08;engine x&#xff09;是俄罗斯人编写的十分轻量级的HTTP服务器是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3/SMTP代理服务器官方网站&#xff1a;http://nginx.org/ NGINX概述 Nginx默认配置文件&#xff1a;/etc/ngin…

scrapy爬取名人名言

爬取名人名言&#xff1a;http://quotes.toscrape.com/ 1 创建爬虫项目&#xff0c;在终端中输入&#xff1a; scrapy startproject quotes2 创建之后&#xff0c;在spiders文件夹下面创建爬虫文件quotes.py&#xff0c;内容如下&#xff1a; import scrapy from scrapy.spi…

mmsegmentation训练自己的数据集

文章目录 前言一、安装MMSegmentation二、数据集转换1.labelme标签数据转化为voc数据 三、训练设置1.建立数据集文件&#xff0c;并存入数据集2.设置训练配置文件 四、使用官方权重1、选择预测的方法2、查看方法支持的预训练数据集和权重权重位置找到对应的数据集下载权重 3、使…

LeetCode994. 腐烂的橘子(2024秋季每日一题 54)

在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中没有…

Pinctrl子系统中Pincontroller构造过程驱动分析:imx_pinctrl_soc_info结构体

往期内容 本专栏往期内容&#xff1a; Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析 input子系统专栏&#xff1a; 专栏地址&#xff1a;input子系统input角度&#xff1a;I2C触摸屏驱动分析…

地理信息科学专业想搞GIS开发:学前端还是后端?

地理信息科学专业的同学是学前端开发比较好呢还是学后端开发比较好呢&#xff1f; 部分网友&#xff1a;学前端更好 主修前端更好&#xff0c;因为地信学后端&#xff0c;是卷不赢学计算机的 本科卷前端&#xff0c;硕士阶段可以卷后端 甚至有网友直呼&#xff0c;地信根本没有…

批处理之for语句从入门到精通--呕血整理

文章目录 一、前言二、for语句的基本用法三、文本解析显神威&#xff1a;for /f 用法详解四、翻箱倒柜遍历文件夹&#xff1a;for /r五、仅仅为了匹配第一层目录而存在&#xff1a;for /d六、计数循环&#xff1a;for /l后记 for语句从入门到精通 一、前言 在批处理中&#…

第8章利用CSS制作导航菜单(第八次作业)

效果图如下&#xff1a; Html代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>山水之间</title><style type"text/css">import url("../css/work1.css");</style…

Ubuntu22.04 安装图形界面以及XRDP教程

一、准备环境 1.一台服务器安装系统ubuntu&#xff08;这里大部分ubuntu系统可以同用&#xff09; 2.安装的ubuntu系统未安装图形界面 二、操作步骤 1.远程ssh或者直接登录服务器命令行界面 ssh -p 远程端口 rootIP 2.更新系统软件包 sudo apt update # 更新本地的软件包…

深度学习基础知识-编解码结构理论超详细讲解

编解码结构&#xff08;Encoder-Decoder&#xff09;是一种应用广泛且高效的神经网络架构&#xff0c;最早用于序列到序列&#xff08;Seq2Seq&#xff09;任务&#xff0c;如机器翻译、图像生成、文本生成等。随着深度学习的发展&#xff0c;编解码结构不断演变出多种模型变体…

扫描电镜的超低温冷冻制样及传输技术(Cryo-SEM)

扫描电镜的超低温冷冻制样及传输技术(Cryo-SEM) 扫描电镜&#xff08;Scanning Electron Microscope&#xff0c;简称SEM&#xff09;是一种利用聚焦电子束扫描样品表面&#xff0c;通过检测二次电子或反射电子等信号来获取样品表面形貌信息的显微观察技术&#xff1b;然而&…

JS手写:从0开始认识【柯里化】【支持占位符的柯里化】

柯里化 功能介绍 柯里化是拆分函数的一种手段&#xff0c;允许我们以偏函数的方式调用这个函数。 比如说&#xff0c;原来的函数A必须传入三个参数才能运行。经过柯里化处理之后的函数KA传入三个参数&#xff0c;能成功运行&#xff1b;传入两个参数也能&#xff0c;但是会返…

WebSocket 连接频繁断开的问题及解决方案

文章目录 WebSocket 连接频繁断开的问题及解决方案1. 引言2. 什么是 WebSocket&#xff1f;2.1 WebSocket 的优势2.2 WebSocket 的工作原理 3. WebSocket 连接频繁断开的常见原因3.1 服务器端问题3.1.1 服务器负载过高3.1.2 服务器配置不当3.1.3 超时设置 3.2 网络问题3.2.1 网…

openGauss开源数据库实战十二

文章目录 任务十二 openGauss逻辑结构:表管理任务目标实施步骤一、准备工作二、创建表1.新建表默认保存在public模式中2.在一个数据库的不同模式下创建表3.创建表的时候定义约束4.创建表时使用自增数据类型5.使用现有的表创建新表 三、查看表的信息1.在gsql中查看表的定义2.查看…

ADI仿真连接有效性检查方法

1、确认仿真器引脚接插OK. A、检查电脑正常连接 B、确认仿真器引脚定义匹配与上电正确连接 2、打开CCES&#xff0c;打开Debug Configurations 3、连接芯片类型选择 4、点击Configuratior… 5、选择Test…,在点Start&#xff0c;确认状态都OK&#xff0c;即可开始仿真调…

docker部署nginx+nacos+redis+java镜像和容器

nginx镜像制作 Dockerfile内容&#xff1a; # 基础镜像 FROM nginx # author MAINTAINER ruoyi# 挂载目录 VOLUME /home/ruoyi/projects/ruoyi-ui # 创建目录 RUN mkdir -p /home/ruoyi/projects/ruoyi-ui # 指定路径 WORKDIR /home/ruoyi/projects/ruoyi-ui # 复制conf文件到路…

SAP RFC 用户安全授权

一、SAP 通讯用户 对于RFC接口的用户&#xff0c;使用五种用户类型之一的“通讯”类型&#xff0c;这种类型的用户没有登陆SAPGUI的权限。 二、对调用的RFC授权 在通讯用户内部&#xff0c;权限对象&#xff1a;S_RFC中&#xff0c;限制进一步可以调用的RFC函数授权&#xff…