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”);
         }
    }

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

     

  • 相关阅读:
    IIS支持apk文件下载
    【转】Winform输入法控制
    WebRequest请求Url中文乱码
    c#实现Form窗体始终在桌面最前端显示
    在静态页面中使用 Vue.js
    NPOI 的使用姿势
    C# 模拟 HTTP POST请求
    WinForm 绑定到嵌套对象上的属性
    彻底清除 Windows 服务
    WPF DataGrid 绑定行双击行命令
  • 原文地址:https://www.cnblogs.com/biyeymyhjob/p/2589738.html
Copyright © 2011-2022 走看看