zoukankan      html  css  js  c++  java
  • 百度2012校招笔试题之全排列与组合

    算法题目:

    求一个全排列函数:

    如p([1,2,3])输出:[123],[132],[213],[231],[321],[323].

    思路:采用字典序的排序的方法 

    代码实现:

    void swap(char *a,char *b)
    {
         char temp;
         temp=*a;
         *a=*b;
         *b=temp;
    }
    
    void reverse(char *dic ,int start,int end)
    {
         int i=start,j=end;
         for(;i<=j;i++,j--)
              swap(dic[i],dic[j]);
    }
    void perm (char *dic)
    {
          bool flag;
    
          while()
          {
              Print(dic);
              flag = true;
              int i,l;
              for(i=size ; i>=1;i--)
              {
                if(dic[i]>dic[i-1])
                {
                    flag = false;break;
                }
              }
        
           if(flag) break;
        
           for(l=size;l>i-1;l--)
           { 
                if(dic[l]>dic[i-1])
                     break;
           }
        
           swap(dic[i-1],dic[l]);
           reverse(dic,i-1,size-1);
         }
    }

    算法设计

    求一个组合函数

    如p([1,2,3])输出:[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]

    思路:设一个数组a,数组a中的数必须是0和1当中的一个,将待组合数每一个数关联到数组中,接着按照二进制的规则,对数组a构建成的二进制数一步一步加1,在这个过程中,数组a每次构建一个二进制的数,对应数组为1的待组合数集合当中的数立即输出,构成一次组合,依次类推。

     

     

    void cov(int num,int *a,int size)
    {
        int mark=num;
        for(int i=size-1;mark!=0;mark/=2,i--)
       {
           if(mark%2)
                 a[i]=1;
           else
                 a[i]=0;
        }
    }
    
    void combine1(char *dic, int size)
    {
         int a[size];
         long int max=2*size
    
         for(long int i=1;i<=max;i++)
         {
            for(int j=0;j<size;j++)
                  a[j]=0;
            cov(i,a,size);
            for(int j=0;j<size;j++)
           {
                 if(a[j]==1)
                {
                     printf(“%c,”,dic[j]);
                 }
            }
            printf(“\n”);
         }
    }

     注:以上还可以用字典树实现效率或更高些

     

  • 相关阅读:
    Linux systemtap定位系统IO资源使用情况(ok)
    DISK 100% BUSY,谁造成的?(ok)
    容易被误读的IOSTAT
    利用BLKTRACE分析IO性能
    iowait 过高问题的查找及解决linux
    top后台执行显示:top: failed tty get 错误
    Nginx解读内置非默认模块 ngx_http_stub_status_module
    Nginx健康检查模块
    平滑升级你的Nginx
    Practice telephone techniques
  • 原文地址:https://www.cnblogs.com/biyeymyhjob/p/2589738.html
Copyright © 2011-2022 走看看