取得格雷碼Gray code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ex1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
int n = 0;
do
{
Console.Write("input number :");
n = int.Parse(Console.ReadLine());
getGraycode_step(n);
getGraycode_stack(n);
getGraycode_shift(n);
} while (n > 0);
}
/// <summary>
/// 逐一字元比對
/// </summary>
/// <param name="n"></param>
static void getGraycode_step(int n)
{
char[] graycode = ("0".PadRight(n, '0')).ToCharArray();
char[] binary = ("0".PadRight(n, '0')).ToCharArray();
Console.WriteLine(0 + " " + string.Join("", binary) + " " + string.Join("", graycode));
for (int i = 1; i < Math.Pow(2, n); i++)
{
int b_index = binary.Length - 1;
while (binary[b_index].Equals('1') && b_index > 0)
{
binary[b_index] = '0';
b_index--;
}
binary[b_index] = '1';
graycode[b_index] = binary[b_index];
for (int g_index = graycode.Length - 1; g_index > 0; g_index--)
{
graycode[g_index] = binary[g_index].Equals(binary[g_index - 1]) ? '0' : '1';
}
Console.WriteLine(i + " " + string.Join("", binary) + " " + string.Join("", graycode));
}
}
/// <summary>
/// 使用堆疊Stack
/// </summary>
/// <param name="n"></param>
static void getGraycode_stack(int n = 4)
{
Stack<int> graycode = new Stack<int>();
List<int> tgraycode = new List<int>();
graycode.Push(0);
for (int i = 0; i <= n; i++)
{
int addint = tgraycode.Count();
while (graycode.Count > 0)
{
tgraycode.Add(graycode.Pop() + addint);
}
for (int listindex = 0; listindex < tgraycode.Count; listindex++)
{
graycode.Push(tgraycode[listindex]);
}
}
//Console.WriteLine("G:" + string.Join(" ", graycode.ToArray()));
Console.WriteLine("T:" + string.Join(" ", tgraycode.ToArray()));
}
/// <summary>
/// 移位運算
/// </summary>
/// <param name="n"></param>
static void getGraycode_shift(int n)
{
List<int> result = new List<int>();
for (int i = 0; i < (1 << n); i++)
{
result.Add(i ^ (i >> 1));
}
Console.WriteLine("G:" + string.Join(" ", result.ToArray()));
}
}
}