九连环C语言程序

最近在玩九连环游戏,就写个九连环程序。


古董九连环

九连环蕴含以下知识:

  • 递归
  • 格雷码
  • 二进制
#include <stdio.h>

typedef enum {
  DOWN,
  UP
} direction;

#define DISP(d) (d == UP ? "Up  " : "Down")

char charDirection(direction d) {
  return d == UP ? '1' : '0';
}

direction reverse(direction d) {
  return d == DOWN ? UP : DOWN;
}

void upDownOne(char *p, int n, direction d) {
  *(p + n) = charDirection(d);
  printf("%s %d  %s \n", DISP(d), n, p);
}

void upDownMultiple(char *p, int n, direction d) {
  if (n == 1) {
    *(p + 1) = charDirection(d);
    printf("%s 1  %s \n", DISP(d), p);
    return;
  } else if (n == 2) {
    *(p + 1) = charDirection(d);
    *(p + 2) = charDirection(d);
    printf("%s 12 %s  \n", DISP(d), p);
    return;
  }
  upDownMultiple(p, n - 2, d);
  upDownOne(p, n, d);
  direction u = reverse(d);
  upDownMultiple(p, n - 2, u);
  upDownMultiple(p, n - 1, d);
}

int main() {
  char ring[11] = " 111111111";
  upDownMultiple(ring, 9, DOWN);
  return 0;
}
/* output
  Down 1   011111111
  Down 3   010111111
  Up   1   110111111
   ...
  Up   1   110000000
  Down 12  000000000 */
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容