对于给定的正整数n,格雷码为满足如下条件的一个编码序列: (1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串。 (2) 序列中无相同的编码。 (3) 序列中位置相邻的两个编码恰有一位不同。 例如:n=1时的格雷码为:{0, 1}。 n=2时的格雷码为:{00, 01, 11, 10}。 n=3时的格雷码为:{000, 001, 011, 010,110,111,101,100}。 gr

 1 import java.util.Scanner;
 2 
 3 public class geleima {
 4      public static void main(String[] args) {
 5             // TODO Auto-generated method stub
 6 
 7             System.out.print("输入n:");
 8             Scanner scan = new Scanner(System.in);
 9             int n = scan.nextInt();
10             String[] g = GrayCode(n);
11             for(int i = 0 ; i < g.length ; i ++){
12                 System.out.println(g[i]);
13             }
14 
15         }
16         public static String[] GrayCode(int n) {  
17 
18             // 开2^n的字符串数组 
19             String[] graycode = new String[(int) Math.pow(2, n)];  
20             if (n == 1) {  //出口
21                 graycode[0] = "0";  
22                 graycode[1] = "1";  
23                 return graycode;  
24             }  
25             //上一位元的格雷码
26             String[] last = GrayCode(n - 1);  
27              //在上一位元的基础上加一层0,1
28             for (int i = 0; i < last.length; i++) {  
29                 graycode[i] = "0" + last[i];  
30                 graycode[graycode.length - 1 - i] = "1" + last[i];  
31             }  
32 
33             return graycode;  
34         }
35 }
View Code
 1 import java.util.Scanner;
 2 
 3 public class geleima {
 4      public static void main(String[] args) {
 5             // TODO Auto-generated method stub
 6 
 7             System.out.print("输入n:");
 8             Scanner scan = new Scanner(System.in);
 9             int n = scan.nextInt();
10             String[] g = GrayCode(n);
11             for(int i = 0 ; i < g.length ; i ++){
12                 System.out.println(g[i]);
13             }
14 
15         }
16         public static String[] GrayCode(int n) {  
17 
18             // 开2^n的字符串数组 
19             String[] graycode = new String[(int) Math.pow(2, n)];  
20             if (n == 1) {  //出口
21                 graycode[0] = "0";  
22                 graycode[1] = "1";  
23                 return graycode;  
24             }  
25             //上一位元的格雷码
26             String[] last = GrayCode(n - 1);  
27              //在上一位元的基础上加一层0,1
28             for (int i = 0; i < last.length; i++) {  
29                 graycode[i] = "0" + last[i];  
30                 graycode[graycode.length - 1 - i] = "1" + last[i];  
31             }  
32 
33             return graycode;  
34         }
35 }

 

posted on 2017-12-10 18:30  jun俊  阅读(672)  评论(0)    收藏  举报

导航