格雷码输出

格雷码打印:打印出0~2n-1数,且相邻两个数只有一位不同。

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int n;
    cin>>n;
    vector<int> result;
    result.push_back(0);
    for(int i=0;i<n;i++)
    {
        int high_bit=1<<i;
        for(int j=result.size()-1;j>=0;j--)
        {
            result.push_back(result[j]|high_bit);
        }
    }
    for(int i=0;i<result.size()-1;i++)
    {
        cout<<result[i]<<", ";
    }
    cout<<result[result.size()-1]<<endl;

}
时间: 2024-10-29 19:12:11

格雷码输出的相关文章

FPGA学习笔记之格雷码、边沿检测、门控时钟

一.格雷码 格雷码的优点主要是进位时只有一位跳变,误码率低. 1.二进制转格雷码 我们观察下表: 二进制码 格雷码 00 00 01 01 10 11 11 10 二进制码表示为B[],格雷码表示为G[],则有 G(i) = B(i),i为最高位 G(i-1) = B(i) xor B(i-1),i非最高位 用verilog可以这样写 1 reg [WIDTH-1:0] bin; 2 reg [WIDTH-1:0] gray; 3 parameter WIDTH = 8; 4 always @(

格雷码计数器

简介 实现FIFO存储器读写指针比较好的方法就是使用格雷码计数器.格雷码计数器的优势在于其相邻两个数值之间只有一位发生变化,提高了系统的抗干扰能力,而且在计数时,各个输出的门电路翻转次数要远远小于二进制计数器,从而可以大幅度降低系统的功耗. 实现格雷码计数器的步骤如下: 将格雷值转换为二进制值. 根据条件递增二进制值. 将二进制值转换为格雷码 将计数器的最终格雷值保存到寄存器中. 格雷码转二进制 格雷码转二进制的公式如下: binn?1=grayn?1bini=grayi?bini+1 格雷码转

Gray码 (格雷码) 【二进制】

以下内容是看了Matrix67的关于二进制的blog(Link)的一点总结与摘录. Gray码,中文“格雷码”,是一种特殊的编码,相邻两个格雷码的二进制表示中有且仅有一位不同,且 n 阶 Gray 码是 0~2^n-1 的一个排列. n 阶 Gray  码可以由 n-1 阶 Gray 码镜像翻转之后最前面加一个 '1' 得到. 比如 2 阶 Gray 码为: 00 01 11 10 3 阶: 000 001 011 010 110 111 101 100 这样就巧妙的实现了相邻的数只有一个二进制

bzoj1081 [SCOI2005]超级格雷码

Description 著名的格雷码是指2n个不同n位二进制数(即0~2n-1,不足n位在前补零)的一个排列,这个排列满足相邻的两个二进制数的n位数字中最多只有一个数字不同(例如003和001就有一个数位不同,而003和030有两个数位不同,不符合条件).例如n=2时,(00,01,11,10)就是一个满足条件的格雷码. 所谓超级格雷码就是指Bn个不同的n位B进制数的排列满足上面的条件. 任务:给出n和B(2≤B≤36, 1≤Bn≤65535),求一个满足条件的格雷码.对于大于9的数位用A~Z表

BZOJ1081超级格雷码

著名的格雷码是指2n个不同n位二进制数(即0~2n-1,不足n位在前补零)的一个排列,这个排列满足相邻的两个二进制数的n位数字中最多只有一个数字不同(例如003和001就有一个数位不同,而003和030有两个数位不同,不符合条件).例如n=2时,(00,01,11,10)就是一个满足条件的格雷码. 所谓超级格雷码就是指Bn个不同的n位B进制数的排列满足上面的条件. 任务:给出n和B(2≤B≤36, 1≤Bn≤65535),求一个满足条件的格雷码.对于大于9的数位用A~Z表示(10~35). 题解

格雷码与二进制之间的互换

#include <stdio.h> #include <stdlib.h> /*格雷码转二进制*/ int grayToBin(int n) { int size = 0; int res[255]; int out = 0; int flag = 0; /*先缓存*/ while (n) { res[size++] = n%2; n /= 2; } /*利用转换关系求出最后的结果*/ for (int i=size-1; i>=0; i--) { flag = res[i

【LeetCode-面试算法经典-Java实现】【089-Gray Code(格雷码)】

[089-Gray Code(格雷码)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 The gray code is a binary numeral system where two successive values differ in only one bit. Given a non-negative integer n representing the total number of bits in the code, print the sequen

[BZOJ 1081] [SCOI2005] 超级格雷码 【找规律】

题目链接:BZOJ - 1081 备注:此题BZOJ上貌似没有 spj ,要把一般顺序的每个格雷码倒着输出...比如 0102 输出为 2010 题目分析 就是按照 Gray 码的生成方法写前几个出来找找规律就好了. 生成方法:以 3 位 3 进制为例 0 0 0 0 0 1 0 0 2 0 1 2 //中位写 1 ,后面镜像复制 0 1 1 0 1 0 0 2 0 //中位写 2,后面镜像复制 0 2 1 0 2 2 1 2 2 //高位写 1 ,后面镜像复制 1 2 1 ........ 代

GEEK编程练习— —格雷码

题目 格雷码是一种二进制数值系统.在一组数的编码中,任意两个相邻的代码只有一位二进制数不同.给定一个非负整数n表示格雷码的位数,输出所有格雷码. 格雷码序列从0开始.格雷码不唯一. 输入 2 输出 00 01 11 10 分析 结果要输出二进制形式,可以使用bitset,这里设置最大位数为128位,可根据情况修改.格雷码公式为a ^ (a - 1) 代码 #include <iostream> #include <bitset> using namespace std; int m