首页 > 编程语言 >PTA 生成格雷码 | C++ | 二叉树

PTA 生成格雷码 | C++ | 二叉树

时间:2024-10-22 20:48:24浏览次数:9  
标签:格雷 getGrayCode 输出 C++ 二叉树 序列 输入 PTA

格雷码是一种包含2n个数串的序列,这种序列:

1不存在重复的元素,

2每个元素都是长度为n的二进制数串,

3相邻元素只有一位不同。

例如,长度为23的格雷码为:000,001,011,010,110,111,101,100。

请使用分治法构造格雷码。

提示,使用分治法构造格雷码,详见百度百科。

输入格式:

输入一个正整数n(1<=n<=10)。

输出格式:

输出2n个n位的格雷码。

输入样例:

在这里给出一组输入。例如:

4

输出样例:

在这里给出相应的输出。例如:

0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000

运用二叉树会得到这样的数字序列: 

 如果加入翻转控制,就可以得到格雷码序列:

#include<bits/stdc++.h>
using namespace std;
int n;
bool flag;
void getGrayCode(string str,int deep,bool flag)
{
    if(deep==n)
    {
        cout<<str<<endl;
        return;
    }
    if (flag==false)
    {
        //若flag为false,左子树添0右子树添1
        getGrayCode(str + "0", deep + 1, false);
        getGrayCode(str + "1", deep + 1, true);
    }
    else{
        //反之
        getGrayCode(str + "1", deep + 1, false);
        getGrayCode(str + "0", deep + 1, true);
    }
}
int main()
{
    cin>>n;
    getGrayCode("",0,false);
}

 

标签:格雷,getGrayCode,输出,C++,二叉树,序列,输入,PTA
From: https://blog.csdn.net/remnant_song/article/details/143168049

相关文章

  • 贪吃蛇编译就能玩c++
    #include<stdio.h>#include<conio.h>#include<iostream>#include<stdlib.h>#include<windows.h>#include<time.h>#defineframex2#defineframey2#definewide40#definehigh25usingnamespacestd;inti,a[2];intj=......
  • c++ STL标准模板库-算法
    C++StandardTemplateLibrary(STL)算法是一组泛型算法,它们可以在各种容器上操作。这些算法被设计为与容器无关,因此可以在任何提供必要迭代器接口的容器上使用。STL算法分为以下几个主要类别:非修改算法Non-modifyingsequenceoperations:不改变容器内容,主要用于搜索和排序。......
  • c++时间管理大师
    作者花了一个下午写出来的。c++写的时间管理大师。支持一下。#include<bits/stdc++.h>#include<windows.h>usingnamespacestd;constintpai=250;constintban=pai/2;#defineD1262#defineD2294#defineD3330#defineD4349#defineD5392#defineD6440......
  • 使用 C++ 实现网络编程 NetWork(pro版)
    上一次小编分享了C++实现网络编程NetWork,这是链接:C++网络通信类Network的实现详解-CSDN博客这次小编带着改进之后的NetWork归来!在现代计算机网络中,网络通信是不可或缺的一部分。本文将介绍如何使用C语言实现一个简单的网络通信库,涵盖TCP和UDP协议的基本功能。我们将通过......
  • 二叉树习题其三-Java【力扣】【算法学习day.10】
    前言书接上篇文章二叉树习题其二,这篇文章我们将基础拓展###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.从中序与后序遍历序......
  • 【代码】约瑟夫问题——c++解决代码
    哈喽大家好!我是@学霸小羊,上次讲了讲约瑟夫问题的背景,今天来讲讲怎样用代码实现。(还没了解背景小伙伴的可以先去下面的网址学习一下)【代码】约瑟夫问题——故事背景https://blog.csdn.net/yangyanbin_sam/article/details/143152232?spm=1001.2014.3001.5501首先,我们要将这个......
  • Java 的开发效率究竟比 C++ 高在哪里_1
    在比较Java与C++在开发效率上的不同时,我们可以直接指出几点关键差异:Java的自动内存管理、跨平台能力、更强的标准库、以及较好的异常处理机制。特别地,Java的自动内存管理使用垃圾收集器来自动化对象的生命周期管理,这就意味着开发人员不需要手动分配和释放内存,大大减少了内存泄漏......
  • leetcode:二叉树oj题
    目录1.单值二叉树2.相同的树3.对称二叉树4.二叉树的前序遍历5.二叉树的中序遍历6.二叉树的后序遍历1.单值二叉树https://leetcode.cn/problems/univalued-binary-tree/description/        对于这道题,我们可以进行深度优先查找,当值相同时就继续向下查找......
  • 【LeetCode】动态规划—790. 多米诺和托米诺平铺(附完整Python/C++代码)
    动态规划—790.多米诺和托米诺平铺题目描述前言基本思路1.定义2.理解问题和递推关系3.解决方法4.进一步优化5.小总结代码实现Python代码Python代码解释总结C++代码C++代码解释总结总结题目描述前言本文将详细讨论LeetCode上的"多米诺和三米诺平铺"问题。......
  • 英特尔Optane内存和传统SSD有哪些差异
    英特尔Optane内存与传统SSD在多个方面存在显著差异,包括:1.存储技术不同;2.读写速度差异;3.耐用性和可靠性;4.价格和成本效益;5.应用场景和用户需求。Optane内存采用3DXPoint技术,提供比传统SSD更快的读写速度和更高的耐用性。然而,其价格通常高于标准SSD,使其更适合高性能要求的应用场景......