• 腾讯笔试题----格雷码的实现


      昨天腾讯C++研发的一道笔试题,给定一个N,求这N位的格雷码,如果不知道格雷码的请自行问度娘。由于当时答题时间比较紧,所以没有考虑清楚到底该怎么做,只是有一个大体的思路,但是还是没有写上去(感觉自己解决问题的能力还是弱啊.....)。

      题目已经提示,使用递归求解,既然是递归,我当时想应该利用分治法求解,先设置一位,然后问题的规模就变成N-1,然后再求解,又联想到剑指offer的第12题(打印1到最大的n位数),所以感觉这种思路应该是可以求解的,但是还有一个问题有待解决--怎么满足格雷码的要求(每次变化1位),这个应该是个大问题,想了一会儿也没想出来就放弃了....

      交卷以后仔细考虑了一下,查了百度的资料,综合成了自己的答案,下面是我的代码及思路,如果有更好的想法可以留言交流,3Q!

     1 #include <iostream>
     2 using namespace std;
     3 void print(int data[],int n){
     4     for(int i=0;i<n;i++)
     5         cout << data[i];
     6     cout << endl;
     7 }
     8 void mygrey(int cur,int data[],int n){
     9     if(cur==0){
    10         data[cur]=1-data[cur];   //递归终止的条件,cur=0,cur的初始化是n-1,即先设置第0位上的数字
    11         print(data,n);
    12     }
    13     else{
    14         mygrey(cur-1,data,n);   //在data[cur]=0的情况下,设置前n-1位
    15         data[cur]=1-data[cur];  //修改当前位的值
    16         print(data,n);
    17         mygrey(cur-1,data,n);   //在data[cur]=1的情况下,设置前n-1位的值
    18     }
    19 }
    20 int main(){
    21     const int n=4;
    22     int data[n]={0};
    23     print(data,n);
    24     mygrey(n-1,data,n);
    25     return 0;
    26 }

      

  • 相关阅读:
    在maven项目中引用ueditor报错问题
    mysql主从复制
    Nginx+tomcat负载均衡配置
    SSM框架——使用MyBatis Generator自动创建代码
    mysql定时任务用到存储过程和定时任务
    ajax跨域请求のJSONP
    mysql中把一个表的数据批量导入另一个表中
    在Mysql中查询两个时间段的差,可以是秒,天,星期,月份,年...
    input框的输入限制
    java项目启动时执行指定方法
  • 原文地址:https://www.cnblogs.com/sjinsa/p/4788108.html
Copyright © 2020-2023  润新知