格雷码(Gray Code)序列
现代计算机一般采用二进制来表示数据,即用0和1的组合来表示各种信息。格雷码是这样一种排列数字的方式,所有相邻整数在它们的二进制表示中只有一
个位不同。例如,下面是3bit的格雷码(注意开始和结束的数字也只有一位不同):
000 001 011 010 110 111 101 100
0 1 3 2 6 7 5 4
格雷码具有很多重要的用途。例如,信息在传输的过程中,可能发生问题,某一位从0变到1或者反过来,格雷码的特性能够容易地检测到可能出现的奇数个
错误;在数模转换中,格雷码每次的数据变化量小,因此产生的电流脉冲变化也小,出现故障的几率会下降。格雷码还可以应用在集成电路优化、超立方体结构优
化,甚至包括图书馆书架上的书的摆放方法的优化等问题上。
产生格雷码的方法有多种,这里介绍反射式格雷码的生成算法:
如上图所示,一个bit的格雷码序列只有0,1;
两个bit的格雷码通过一个bit的格雷码序列产生:原始序列前面加上"0",然后把原始序列反序,前面加上"1",最后放在一起形成两个bit的
格雷码;
三个bit的格雷码用类似的方法从两个bit的格雷码产生。
======
本题要求生成指定bit的格雷码序列。
输入:
格雷码的位数n
输出:
对应的反射式
(请按照题目中给出的方法生成)
样例输入:
3↵
样例输出:
000↵
001↵
011↵
010↵
110↵
111↵
101↵
100↵
import java.util.Scanner;
public class Gray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int num = (int)Math.pow(2, n);//根据输入的整数,计算出此Gray序列大小
String[] s1 = {"0","1"};//第一个Gray序列
for(int i=2;i<=n;i++){//循环根据第一个Gray序列,来一个一个的求
int p = (int)Math.pow(2, i);//到了第几个的时候,来计算出此Gray序列大小
String[] si = new String[p];
for(int j=0;j<p;j++){//循环根据某个Gray序列,来一个一个的求此序列
if(j<(p/2)){
si[j] = "0" + s1[j];//原始序列前面加上"0"
}else{
si[j] = "1" + s1[p-j-1];//原始序列反序,前面加上"1"
}
}
s1 = si;//把求得的si,附给s1,以便求下一个Gray序列
}
for(int i=0;i<num;i++){
System.out.println(s1[i]);
}
}
}
相关推荐
两个bit的格雷码通过一个bit的格雷码序列产生:原始序列前面加上"0",然后把原始序列反序,前面加上"1",最后放在一起形成两个bit的格雷码;
Gray Code是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数好了,任两个数之间只有一个位元值不同,例如以下为3位元的Gray Code: 000 001 011 010 110 111 101 100 由定义可以知道,Gray Code...
科普特序列和格雷码序列,matlab随机数列
利用递归生成格雷码的算法。算法简单明了。
输入分辨率生成相应的格雷码图案,文件里自带1024*768分辨率的
设计求格雷码的递归算法并实现。 2. 具体要求(若在ACM平台上提交程序,必须按此要求)――平台上1769题 输入:输入的第一行是一个正整数m,表示测试例个数。接下来几行是m个测试例的数据,每个测试例的数据由一个...
格雷码图片生成与保存C++实现代码
参考资料-格雷码Gray编码器与单片机的接口设计.zip
2)格雷码问题。即利用分治法产生n位的格雷码,n由系统给出,n小于10.
有普通十进制数或二进制数生成格雷码或格雷码表的c++程序
横竖正弦条纹图 格雷码生成matlab程序
格雷码产生的程序有不少,有递归实现的,但是其实只要两个操作,就能产生: 一个是右移 一个是异或 本程序十分简单的就产生了格雷码,值得一看
格雷码(Gray code)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码,是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的...
C++OpenCV格雷码生成
本设计实现了CRC循环冗余检验的四种标准的算法实现,和格雷码的算法实现,并且有设计文档。同时用C#的语言实现以窗口形式呈现。
该程序采用Java作为设计语言,采用了分治算法来实现任意长度的Gray码,代码简明清晰,易于理解。 关键词:Java;Gray码;分治算法 Gray码,又称为格雷码,是一种二进制数列的排列方式。它的特点是任意两个连续的数值...
一个格雷码计数器,利用Verilog语言实现,一个初学者的好例子。
实现输入一个数字,并将其转换为对应的格雷码的功能
对于给定的正整数n,格雷码为满足如下条件的一个编码序列: (1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串。 (2) 序列中无相同的编码。 (3) 序列中位置相邻的两个编码恰有一位不同
格雷码产生文件,可以产生任意长度位数的格雷码,并生成在文本文档中