格雷码(c/python略)
来源:互联网 发布:日本清酒 知乎 编辑:程序博客网 时间:2024/06/06 20:16
Gray Code是一个数列集合 , 每个数使用二进位来表示 , 假设使用n位元来表示每个数好了 , 任两个数之间只有一个位元值不同:
如三位数的格雷码:
000 001 011 010 110 111 101 100
解法
观察奇数项的变化时,我们发现无论它是第几个Gray Code,永远只改变最右边的位元,如果是1就改为0,如果是0就改为1。
观察偶数项的变化时,我们发现所改变的位元,是由右边算来第一个1的左边位元。
c代码
#include<stdio.h>#include<stdlib.h>#define N 20void change(int &);int main(){ int bits; printf("输入位元数:"); scanf_s("%d", &bits); int num[N]; for (int i = 0; i < bits; i++) { num[i] = 0; printf("%d", 0); } printf("\n"); bool flag = true; while (1) { int i; if (flag) { change(num[0]); //奇数项的变化永远只改变最右边的位元,如果//是1就改为0,如果是0就改为1 } else { //偶数项的变化时,所改变的位元,是由右边算来第一个1的左边位元 for (i = 0; i < bits&&num[i] == 0; i++); if (i == bits-1) break; change(num[i + 1]); } for (int i = bits - 1; i >= 0; i--) printf("%d", num[i]); printf("\n"); flag = !flag; } system("pause"); return 0;}void change(int &x){ x=(x == 0 ? 1 : 0); //return x}
阅读全文
0 0
- 格雷码(c/python略)
- 八枚硬币(c\python略)
- 简单三色塔(c/python略)
- 完美数(c/python略)
- 赌博游戏(C/python略)
- 后序式运算(C/python略)
- 洗扑克牌(乱数排列)(c/python略)
- 筛选求素数和普通求法(C/python略)
- 最大公因数,最小公倍数,因式分解(C/python略)
- 插入,选择,冒泡排序(C/python略)
- m个元素的n元素子集(c/python略)
- Objective-C基础测试(略简单)
- [C#] 生成略缩图
- [C#] 生成略缩图
- [C#] 生成略缩图
- [C#] 生成略缩图
- [C#] 生成略缩图
- [C#] 生成略缩图
- 商品管理系统_增删改查过滤
- lg1443马的遍历
- Android Studio出现Error:resource style/Base.V25.Theme.AppCompat.Light、aapt2.Aapt2Exception: AAPT2 erro
- 欢迎使用CSDN-markdown编辑器
- 初学者---Android (简单总结)Retrofit请求方式之get,post
- 格雷码(c/python略)
- ubantu镜像修改
- 购物车管理
- STM32 系统架构及存储器映射
- 【市选模拟题】合并果子
- Git使用简介一(入门级)
- linux之数据库mysql
- 洗心革面,坚持自律
- 深入剖析ThreadLocal