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

【NOIP普及组】 FBI树

【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));}// 判断字符串是否全为0if (isAllSame(str, '0')) {return 'B';}// 判断字符串是否全为1else 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);}// 判断字符串是否全为0if (isAllSame(str, '0')) {return 'B';}// 判断字符串是否全为1else 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++) {// 如果有任何一个字符与指定字符不同,返回falseif (str.charAt(i)!= ch) {return false;}}// 如果所有字符都与指定字符相同,返回truereturn 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));}// 判断字符串是否全为0if (isAllSame(str, '0')) {return 'B';}// 判断字符串是否全为1else 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_functiondef 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='')# 判断字符串是否全为0if all(char == '0' for char in s):return 'B'# 判断字符串是否全为1elif 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.mrgr.cn/news/63821.html

相关文章:

  • Linux中部署PostgreSQL保姆级教程
  • 利用ExcelJS封装一个excel表格的导出
  • chrome编辑替换js文件的图文教程
  • conda的对应环境下安装cuda11.0和对应的cudnn
  • vue框架总览
  • HTML 标签全解析:从基础到高级
  • ATom:加州理工学院(CIT)化学电离质谱仪(CIMS)测量的气相有机和无机分析物的浓度CIT-CIMS
  • 代码随想录算法训练营第十七天| 654最大二叉树、617合并二叉树、700二叉搜索树中的搜索、98验证二叉搜索树
  • mlp文件夹继续阅读
  • ST IoT Wireless 物联网与无线技术 研讨会
  • 现代生产系统DORA的应用与集成
  • 理解typeScript中的高级类型
  • 如何在Linux下部署自己的ZFile开源网盘
  • 使用MongoDB Atlas构建无服务器数据库
  • CentOS下载ISO镜像的方法
  • CF983(div2)(未补)
  • Ubuntu软件包管理机制
  • PyTorch实践-CNN-鸢尾花分类
  • 资深项目经理推荐的这五款国产项目管理软件值得收藏使用
  • Kotlin一之内置类型
  • 【数据结构】构造函数和析构函数
  • Linux 进程间通信——管道
  • 问答系统评估标准
  • 安装scrcpy-client模块av模块异常,环境问题解决方案
  • leetcode hot100【LeetCode 279. 完全平方数】java实现
  • Pandas JSON学习