zoukankan      html  css  js  c++  java
  • 关于二进制的利用

    寻找一个序列的真子集。

    x&n == x

    其实也是以上类似的原理。遍历的一个序列的所有可能排列。 也就是说有4个元素。 那么对于1个 对于2个 对于3个 对于4个。这样所有的排列情况列举。

    比如4个元素。那就是 i = pow(2,5)-1 = 1111;

    for(x=1;x<i;x++)

    {

      x 就是这种序列。

    }

    #include<iostream>
    #include<set>
    #include<map>
    #include<queue>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    
    int lim[25];
    int init()
    {
        lim[0]=1;
        lim[1]=2;
        for(int i=2;i<=22;i++)
            lim[i]=lim[i-1]*2;
    }
    // 即用bin就是lim[0] = 1 lim[1] = 10 lim[2] = 100...
    int main()
    {
        int n,k,s;
        init();
        while(scanf("%d%d%d",&n,&k,&s)&&!(!n&&!k&&!s))
        {
            int res=0;
    
    for(int i=0;i<lim[n];i++) { //即 指定的所有排列。 任意取一个 还是2个 还是怎么的。也就是所谓的真子集。 太机智了。 //这货太聪明了。 int ii=i; int all=0,kk=0; int ans=0; while(ii) { all++;//这个也就是ii位置对应的数字。 (也许我会用数组来存吧。不过貌似不好呢。) if(ii%2==1) //也就是最后的一个数字为1 { kk++; ans+=all; } ii/=2; } if(ans==s&&kk==k) res++; } printf("%d ",res); } return 0; }

    这是枚举没有重复的 1~n 也就是 1~n 取嘛

  • 相关阅读:
    算法与数据结构基础
    算法与数据结构基础
    算法与数据结构基础
    算法与数据结构基础
    算法与数据结构基础
    算法与数据结构基础
    最佳实践 根据状态操作,这样能避免吃掉异常
    最佳实践 状态设计
    Android HTTPS如何10分钟实现自签名SSL证书
    马桶选购
  • 原文地址:https://www.cnblogs.com/Milkor/p/4322620.html
Copyright © 2011-2022 走看看