From df569175b6345489bfd9671f2cedf85f31298509 Mon Sep 17 00:00:00 2001 From: begeekmyfriend Date: Tue, 1 Aug 2017 17:48:50 +0800 Subject: [PATCH] Gray code Signed-off-by: begeekmyfriend --- 089_gray_code/Makefile | 2 ++ 089_gray_code/gray_code.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 089_gray_code/Makefile create mode 100644 089_gray_code/gray_code.c diff --git a/089_gray_code/Makefile b/089_gray_code/Makefile new file mode 100644 index 0000000..dbe10ea --- /dev/null +++ b/089_gray_code/Makefile @@ -0,0 +1,2 @@ +all: + gcc -O2 -o test gray_code.c diff --git a/089_gray_code/gray_code.c b/089_gray_code/gray_code.c new file mode 100644 index 0000000..6f72ce6 --- /dev/null +++ b/089_gray_code/gray_code.c @@ -0,0 +1,38 @@ +#include +#include + +/** + ** Return an array of size *returnSize. + ** Note: The returned array must be malloced, assume caller calls free(). + **/ +int* grayCode(int n, int* returnSize) { + if (n < 0) { + return NULL; + } + + int i, count = 1 << n; + int *codes = malloc(count * sizeof(int)); + for (i = 0; i < count; i++) { + codes[i] = (i >> 1) ^ i; + } + + *returnSize = 1 << n; + return codes; +} + +int main(int argc, char **argv) +{ + if (argc != 2) { + fprintf(stderr, "Usage: ./test n\n"); + exit(-1); + } + + int i, count; + int *list = grayCode(atoi(argv[1]), &count); + for (i = 0; i < count; i++) { + printf("%d ", list[i]); + } + printf("\n"); + + return 0; +}