2010年03月04日星期四.sgu249 卡诺图..
这个题是要求生成一个矩阵,要求这个矩阵的元素都只差1bit。
其实学过数字电路设计的应该知道这就是要求生成一个卡诺图。
对横坐标和纵坐标都用gray码,每个格子的值就是 (x << offset) + y
1
2 int cm, cn, m, n;
3 int main()
4 {
5 int i, j;
6 scanf("%d%d", &n, &m);
7 cm = 1 << m;
8 cn = 1 << n;
9 for (i = 0; i < cn;) {
10 for (j = 0; j < cm;) {
11 printf("%d ", (i << m) + j);
12 j ^= 1;
13 printf("%d ", (i << m) + j);
14 j ^= (j ^ (j - 1)) + 1;
15 }
16 i ^= 1;
17 putchar(10);
18 for (j = 0; j < cm;) {
19 printf("%d ", (i << m) + j);
20 j ^= 1;
21 printf("%d ", (i << m) + j);
22 j ^= (j ^ (j - 1)) + 1;
23 }
24 i ^= (i ^ (i - 1)) + 1;
25 putchar(10);
26 }
27 return 0;
28 }
29