递归生成n位的格雷码
来源:互联网 发布:新手开淘宝网店技巧 编辑:程序博客网 时间:2024/06/18 12:25
格雷码的具体定义自行百度,简单的说就是有0和1序列组成,而且相邻的码只有1位不相同;
输入:格雷码位数n
输出:n位格雷码的所有情况
思路:利用递归搞搞
代码:
#include <stdio.h>#include <stdlib.h>int n;char s[17];void dfs(int i){ if(i==n) printf("%s\n",s); //到达底部就输出 else { dfs(i+1); //深度优先搜索 if(s[i]=='0') s[i]='1'; else s[i]='0'; //把当前位逆转 dfs(i+1); //继续向下搜索 }}int main(){ int i; while(1) { scanf("%d",&n); if(!n) break; for(i=0;i<17;i++) s[i]='0'; s[n]='\0'; dfs(0); printf("\n"); } system("pause"); return 0;}
利用一种办法:
#include <iostream>#include <string>#include <vector>#include <algorithm>#include <cmath>using namespace std;vector<string> get_gray(int n){ vector<string> res; if(n==1){ res.push_back("0"); res.push_back("1"); return res; } vector<string> v = get_gray(n-1); int len = pow(2,n-1); for(int i=0;i<len;i++){ res.push_back("0"+v[i]); } for(int i=len-1;i>=0;i--){ res.push_back('1'+v[i]); } return res;}int main(){ int n; cin>>n; vector<string> gy; gy=get_gray(n); for(int i=0;i<gy.size();i++){ cout<<gy[i]<<endl; } return 0;}
0 0
- 递归方法生成N位的格雷码
- 递归生成n位的格雷码
- 生成n位不同的验证码
- 生成n位不同的验证码
- 生成n位不同的验证码
- 生成n位不同的验证码
- Java 生成N位随机数的方法
- 通过递归遍历n位2进制数的所有情况
- leetcode:N-Queens II 的位运算非递归解法
- 格雷码的递归生成
- 求n位的格雷码
- 递归生成n个元素的所有排列方式
- 递归算法生成n个元素的所有排列
- 生成N位格雷码的递归和递推写法
- 生成n位随机字符串
- java生成N位随机数
- 递归与动态规划---N皇后问题的递归方法和位运算方法
- ASP.NET生成n位不同的验证码
- 【spring】spring 与 redis集成
- GO语言内存拷贝
- IBM Cognos 10.2
- [php] 设计模式之 单例模式
- 关于调用相册访问时选择未授权的一个BUG
- 递归生成n位的格雷码
- 网络广告计费方式CPM、CPA、CPS、CPT、CPC及比较分析
- 高并发量网站解决方案
- 安装mingw
- 【spring】AOP注解实现
- Hadoop集群部署介绍
- rw_《计算机是怎样跑起来的》12 章 & 总结
- Android Studio运行程序出现Session ‘app’: Error Launching activity 解决办法
- 【[NOIP2009】靶形数独 题解