公司网站建设开源平台,自己注册个公司做网站怎么样,wordpress文章自动加p,网站免费维护建立网站二进制差异序列#xff08;格雷码#xff09;
Description n 位二进制差异序列是一个由2^n个整数组成的序列#xff0c;其中#xff1a; 每个整数都在范围[0, 2^n - 1]内#xff08;含0和2^n - 1#xff09; 第一个整数是0 一个整数在序列中出现不超过一次 每对相邻整数…二进制差异序列格雷码
Description n 位二进制差异序列是一个由2^n个整数组成的序列其中 每个整数都在范围[0, 2^n - 1]内含0和2^n - 1 第一个整数是0 一个整数在序列中出现不超过一次 每对相邻整数的二进制表示恰好一位不同且 第一个和最后一个整数的二进制表示恰好一位不同 给你一个整数n返回任一有效的n位二进制差异序列1≤n ≤ 16 Input 输入一个整数n Output 输出二进制差异序列每个数之间空格隔开 Sample 代码
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int powN (int) Math.pow(2, n);int[] grayCode new int[powN];for (int i 0; i powN; i) {grayCode[i] toGrayCode(i);System.out.print(grayCode[i] );}}public static int toGrayCode(int i) {return i ^ (i 1);}}
思路 首先n位对应的格雷码不止一个 因此只需要找到一个格雷码输出即可 格雷码跟8421码一样也是一种对数字进行二进制编码的方法只是编码方法跟常见的8421二进制编码方法不一样。 例如 n 3 的 8421 编码和选取的一组格雷码 可以通过这组观察出特殊的规律 1、8421码最左边一位不变保留下来成为格雷码的最左边一位 2、从左边第二位开始将8421码的每一位与它左边的一位相 异或 得到对应位的格雷码 3.也就是将其与其右移一位进行异或操作正数右移左补0 因此可以采取 /**
*i指0-2^n数字
*/
int graycode i ^ (i 1);