精华内容
下载资源
问答
  • 从n个数中选择任意个数组成的组合

    千次阅读 2018-03-15 15:13:03
    从n个数中选择任意个数组成的组合

    开发中遇到一个从n个数字中选择m(m<n)个数的组合 觉得有意思  这个给大家共享一下代码 用到的语言是javascript



    var aadd = [1, 2, 3, 4, 5, 6];
    /**
     * 
     * @param aadd  所有的数字的数组
     * @param xuanlen  需要选择几个数
     * @returns {Array}返回一个数组
     */
    function jisuan(aadd, xuanlen) { 
       var resultArr=[];
        deepCompute(aadd, xuanlen - 1, 0,"",resultArr);
        console.log(resultArr);
        function deepCompute(arr, choselen, index,str) {
            for (var a = index; a < arr.length - choselen; a++) {
                if (choselen != 0) {
                    deepCompute(arr, choselen - 1, a + 1,str+arr[a]+",")
                } else {
                    resultArr.push(str+arr[a])
                }
            }
        }
       
        return resultArr;
    }
    jisuan(aadd, 2);

    展开全文
  • 消除k的二进制的最后一1: k = k & (k-1); 计算x的二进制的最后一1: lowbit(x) = x & -x; #include <iostream> using namespace std; void print_set(int n, int k) { for(int i=0; i<...

    消除k的二进制数的最后一个1:
    k = k & (k-1);
    计算x的二进制数的最后一个1:
    lowbit(x) = x & -x;

    #include <iostream>
    
    using namespace std;
    
    void print_set(int n, int k)
    {
        for(int i=0; i<(1<<n); i++){
            int num = 0, kk = i; //num统计i中1的个数,kk处理i
            while(kk){
                kk = kk&(kk-1);  //清除kk中的最后一个1
                num++;  //统计1的个数
            }
            if(num == k){
                for(int j=0; j<n; j++)
                    if(i & (1<<j))
                        cout<<j<<" ";
                cout<<endl;
            }
        }
    }
    
    
    int main()
    {
        int n,m;
        cin>>n>>m;
        print_set(n,m);
        return 0;
    }
    /*
    5 3
    0 1 2
    0 1 3
    0 2 3
    1 2 3
    0 1 4
    0 2 4
    1 2 4
    0 3 4
    1 3 4
    2 3 4
    */
    
    展开全文
  • 最近遇到一道java算法题,给定一个数组,求出数组里任意个数相加等于一固定数值,求出所有可能性的任意数字组合?求解答,用最原始的算法做出这道题,求大神指点,大神给出答案?
  • 求数组中任意个数组合

    千次阅读 2013-11-18 09:38:29
    /** * 所有组合 * @author Q.Yuan * ... * 求a中count个数组合 * @param a 存放组合的数 * @param restCount 当前还需多少个数构成一个组合 * @param count 在a中挑选出count个数 * @
    /**
     * 所有组合
     * @author Q.Yuan
     *
     */
    public class Combination1 {
    	/**
    	 * 求a中count个数的组合
    	 * @param a          存放组合的数     
    	 * @param restCount  当前还需多少个数构成一个组合
    	 * @param count      在a中挑选出count个数
    	 * @param b			   存放当前组合
    	 * @param pos        指向a中的元素,
    	 */
    	public void combination(int []a,int restCount,int count,int[] b,int pos){
    		if(restCount <= 0 || count > a.length){
    			return;
    		}
    		for(int i = pos;i >= restCount - 1;i-- ){
    			b[restCount - 1] = a[i];
    			if(restCount - 1 == 0){
    				for(int j:b){
    					System.out.print(j);
    				}
    				System.out.println();
    			}
    			combination(a, restCount-1, count, b, i-1);
    		}
    	}
    	public static void main(String[] args) {
    		Combination1 c = new Combination1();
    		int[] a = {1,2,3,4};
    		//挑选出任意两个数的组合
    		final int count = 3;
    		int[] b = new int[count];
    		c.combination(a, count, count, b, a.length - 1);
    	}
    }

    展开全文
  • 打印n元素的集合的子集 #include <iostream> using namespace std; void print_subset(int n) ... { //i:0~2^n,每i的二进制对应一子集,一次打印一子集 for(int j=0; j<n...

    打印n个元素的集合的子集

    #include <iostream>
    
    using namespace std;
    
    void print_subset(int n)
    {
        for(int i = 0; i<(1<<n); i++)
        {  //i:0~2^n,每个i的二进制数对应一个子集,一次打印一个子集
            for(int j=0; j<n; j++)  //打印一个子集,i的二进制数中所有的i
                if(i & (1<<j))  //从i的最低位开始逐个检查每一位,如果是1,就打印
                    cout<<j<<" ";
            cout<<endl;
        }
    }
    
    int main()
    {
        int n;
        cin>>n;
        print_subset(n);
        return 0;
    }
    
    

    打印n个数中任意m个数的组合

    #include <iostream>
    
    using namespace std;
    
    void print_set(int n, int k)
    {
        for(int i = 0; i<(1<<n); i++)
        {
            int num = 0,kk = i;  //num统计i中1的个数;kk用来处理i
            while(kk){
                kk = kk & (kk-1);  //清除kk中的最后一个1
                num++;  //统计1的个数
            }
            if(num == k)
            {
                for(int j=0; j<n; j++)
                    if(i & (1<<j))
                        cout<<j<<" ";
                cout<<endl;
            }
        }
    }
    
    int main()
    {
        int n, k;  //n:元素的总数量; k:个数为k的子集
        cin>>n>>k;
        print_set(n,k);
        return 0;
    }
    
    

    二进制

    展开全文
  • 1 import java.util.Scanner; 2 3 public class 求子集的组合问题2 4 { 5 static void perm(int n,int k) 6 { 7 //int num=0; 8 for(int i=0;i<(1<<n);i++) 9 ...
  • 用几数字任意组合成最大

    千次阅读 2017-08-25 11:21:28
    组合成最大为67256563412 原题: Given a list of non negative integers, arrange them such that they form the largest number. For example, given [3, 30, 34, 5, 9], the largest formed number
  • 比如(0, 1, 2) 列出这三数字的任意组合,组合长度为3: 000,001,002,100,101,102..... 需要一算法,特此记录 使用递归完成,随着可选数字的增多,需要的时间也大大增加,当需要11电话号码的所有组合,则有10的10次方...
  • 比如说 1,2,3,最大的就是321。11,12,13最大的就是131211。如何计算呢: public static void main(String[] args) { String[] strs = new String[]{"9", "923", "9239"}; Arrays.sort(strs...
  • 比如1,2,3,4,5,6这六数字,我想得到它任意5数字的组合任意4数字的组合,该如何得到?使用递归,函数主体如下(il_count为实例变量,仅用于统计,可以不要), mle_1用于输出结果//=======================...
  • 今天做了poj1270这道题,采用了深度优先搜索,确实启发了我,无意中想了一个这么一个问题:求数组中任意n个数的全排列是不是也可以用深度优先去搜索(我理解这是一种深度搜索,不知道对不对)。 代码如下: #include...
  • 从m个数任意去n个数组合

    千次阅读 2012-11-01 20:44:25
    总共有m个数字,从m个数字中找出n个数字的组合。   int b[100];...//从m中选取n个数 i表示当前选择的个数 i==n时候输出 k表示从第k个数字开始 void com(int i,int k) { if(i) { for(int j=k;j;
  • 最后自己终于想通这个问题了,由于这个问题是选出问题,所以先假设好这四个数的顺序,只要四个数不触碰到边界,这四个数是可以在一定幅度上任意调换的。换句话说,这个问题的等价问题就是,从1到17任意选4个,然后让...
  • /** 解决任意长度字串中取任意个数N的组合情况* 程序:一纯(CH.W)* 时间:2011/5/4*/ 室友LWZ在这学期初期上算法设计——迭代算法时提出的问题。 算法的实现以类(class Combination)的形式给出,核心是个f_c...
  • //原始数字,最后按照原始数字顺序,组合即为最大 int bw=place(b); int differ_w=bw-aw; int result=0; int flag=0; while(flag!=1){ if(differ_w>=0) result+=a*ten(differ_w); else result+...
  • 1、递归实现(参考:https://blog.csdn.net/hit_lk/article/details/53967627) 1 public class Test { 2 3 @org.junit.Test ... 4 public void test() { ... 5 System.out.println("方案:" + getAllSc...
  • 如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和的数字中的最小数(从1开始)。 输入描述: 输入第一行为数字个数n (n ≤ 20) 第二行为n个数...
  • 1、最简单的一种是在一个数组中查找两个数和为m的所有组合 直接计算即可,比较简单 2、剑指offer上一题目 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他...
  • 首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。2. 从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。很明显,上述方法是一个...
  • 在进行一些实际的POC测试时,需要根据业务提出的需求构造数据,比如按照任意字段数组合 AND\OR 条件,指定返回结果条数,构造测试数据。 需求 表记录数A 表字段数B 1、N字段等值OR,命中M条记录 (两条件无法...
  • 在进行一些实际的POC测试时,需要根据业务提出的需求构造数据,比如按照任意字段数组合 AND\OR 条件,指定返回结果条数,构造测试数据。 需求 表记录数A 表字段数B 1、N字段等值OR,命中M条记录 (两条件无法...
  • #include <iostream> #include <vector> usingnamespace std; vector<int>...//1,2,5,10四个基数任意次数组合相加得到一个数N,求所有可能组合。 //回溯,背包问题 ...
  • 我用的是int[]模拟二进制+1操作,0表示无,1表示有,当二进制数组+1后,有m1,则认为是一组组合。代码如下:privateListnumList;/***input:n,m*output:displaythecombinationsfor(selectmnu...
  • } /// /// 穷举法 举出所有组合 可能性 /// /// /// /// static List<string> GetCombination(int[] numbers, int count) { //记录可能性 List<string> need_str = new List(); //没有东西就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,025
精华内容 1,610
关键字:

任意个数组合