精华内容
下载资源
问答
  • Java 组合数

    2021-09-14 21:27:50
    1.题目:组合数 给定N个无重复的正整数,和目标数M,找出N中所有子集,使得每个子集的和是M,对于每个数而言,可以选多次,所有结果子集不能够重复。输入为2行,第一行为N和M,第二行为N个数,输出为总共的子集数。 ...

    1.题目: 组合数

    给定N个无重复的正整数,和目标数M,找出N中所有子集,使得每个子集的和是M,对于每个数而言,可以选多次,所有结果子集不能够重复。输入为2行,第一行为N和M,第二行为N个数,输出为总共的子集数。

    2.样例输入:

    4 7

    2 3 6 7

    3.样例输出:

    2

    解释:

    7=7

    2+2+3=7

    4.答案代码:

    import java.util.Scanner;
    
    class Main {
        public static int cnt = 0;
        public static int[] arr = new int[10001];
    
        public static void func(int nowSum, int n, int ct, int target) {
            if (nowSum == target) {
                cnt++;
                return;
            }
            else if (nowSum > target) {
                return;
            }
            for (int i = ct; i <= n; i++) {
                func(nowSum + arr[i], n, i, target);
            }
        }
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int m;
            int n;
            n = in.nextInt();
            m = in.nextInt();
            for (int i = 1; i <= n; i++) {
                arr[i] = in.nextInt();
            }
            func(0, n, 1, m);
            System.out.println(cnt);
        }
    }

    5.提交状态:

     

    展开全文
  • Java 组合数算法

    2021-03-17 14:58:35
    import java.util.*;public class Combination{public static void main(String[] args){Vector testData = new Vector(Arrays.asList(1, 2, 3, 4, 5, 6));Vector results = getAllCombinations(testData);for(int i...

    import java.util.*;

    public class Combination

    {

    public static void main(String[] args)

    {

    Vector testData = new Vector(Arrays.asList(1, 2, 3, 4, 5, 6));

    Vector results = getAllCombinations(testData);

    for(int i=0; i

    System.out.println(results.elementAt(i));

    }

    public static Vector getAllCombinations(Vector data)

    {

    Vector allCombinations = new Vector();

    for(int i=1; i<=data.size(); i++)

    {

    Vector initialCombination = new Vector();

    allCombinations.addAll(getAllCombinations(data, i));

    }

    return allCombinations;

    }

    public static Vector getAllCombinations(Vector data, int length)

    {

    Vector allCombinations = new Vector();

    Vector initialCombination = new Vector();

    combination(allCombinations, data, initialCombination, length);

    return allCombinations;

    }

    private static void combination(Vector allCombinations, Vector data,

    Vector initialCombination, int length)

    {

    if(length == 1)

    {

    for(int i=0; i

    {

    Vector newCombination = new Vector(initialCombination);

    newCombination.add(data.elementAt(i));

    allCombinations.add(newCombination);

    }

    }

    if(length > 1)

    {

    for(int i=0; i

    {

    Vector newCombination = new Vector(initialCombination);

    newCombination.add(data.elementAt(i));

    Vector newData = new Vector(data);

    for(int j=0; j<=i; j++)

    newData.remove(data.elementAt(j));

    combination(allCombinations, newData, newCombination, length - 1);

    }

    }

    }

    }

    转载一个兄弟的组合算法:

    转自:http://www.iteye.com/topic/343282

    展开全文
  • java计算组合数

    2021-02-25 19:12:04
    import java.util.Scanner;public class Zuheshu {//计算m阶乘public static int Fun(int m){int sum=0;if( m < 0 )System.out.println("input error,please input integer(bigger than 1):");else if( m == 1 ||...

    import java.util.Scanner;

    public class Zuheshu {

    //计算m阶乘

    public static int Fun(int m){

    int sum=0;

    if( m < 0 )

    System.out.println("input error,please input integer(bigger than 1):");

    else if( m == 1 || m == 0 )

    return 1;

    else

    sum = m * Fun(m-1);

    return sum;

    }

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Scanner in = new Scanner(System.in);

    int a,b,c,d;

    System.out.println("Please input n :");

    a = in.nextInt();

    System.out.println("Please input k :");

    b = in.nextInt();

    c = Fun(a)/(Fun(b)*Fun(a-b));

    System.out.print("Cnk=" + c);

    d = Fun(a)/(Fun(b-1)*Fun(a-b+1)) + c;

    System.out.print("Cn(k-1)=" + d);

    }

    }

    展开全文
  • 1 /**2 * @author "shihuc"3 * @date 2016年12月1日4 */5 67 import java.util.ArrayList;8 import java.util.Arrays;910 /**11 * @author chengsh0512 *13 * 组合算法...14 *15 * 给定m个不同的,从中选择出n个...

    1 /**2 * @author "shihuc"3 * @date 2016年12月1日4 */

    5 6

    7 import java.util.ArrayList;8 import java.util.Arrays;9

    10 /**11 * @author chengsh0512 *13 * 组合算法实现,支持产品列表页的筛选模块实现全静态化。14 *15 * 给定m个不同的数,从中选择出n个数的不同选择方法有多少种?16 * 答案:一共有 n!/(n-m)!*m!17 *18 * 存储计算出来的组合结构,组合元素之间用逗号分隔19 * 例如1,2,3的全组合:20 * "1,", "2,", "3,","1,2,", "1,3,", "2,3,", "1,2,3,"21 */

    22 public classCombination {23

    24 /**25 * 从m个元素中取出n个元素,获取排序好了的组合数列表,同一个组合中的元素按从小到大排序。26 *27 * @param m 组合的元素基数28 * @param n 组合的被选元素个数29 * @return 排序好后的组合列表30 * @throws Exception31 */

    32 public ArrayList getCombinations(int m, intn) throws Exception{33

    34 if(m

    38 ArrayList resCom =calcCombination(m, n);39

    40 returnresCom;41 }42

    43 /**44 * 通过移位方式,计算给定m个数中取出n个数的组合列表。45 *46 * 具体思路:47 * 一个bit位(boolean)数组中,初始化全为0(false), 然后给左边的n个位初始化为1(true)。48 * <1> 从左向右找第一个10的位置,将10换位程01,然后将这个01左边的所有的1全都 移位到数组的最左边,此时得到的1所在位置下标对应的序列即为一个组合数。49 * <2> 循环重复上面的<1>步骤的操作,直到所有的1都移动到最右边为止。50 *51 * @param m 输入的基数个数52 * @param n 组合被选元素格式53 * @return 原始组合数列表,即没有排序的组合54 */

    55 private ArrayList calcCombination(int m, intn){56 boolean base[] = newboolean[m];57 Arrays.fill(base, false);58 for(int i=0; i

    64 private ArrayList combination(boolean a[], int m, intn){65 ArrayList combination = new ArrayList();66 while(!isAllZeroLeft(a, m, n)){67 for(int i=0; i

    71 combination.add(elem);72 oneZeroSwap(a, i, i+1); //完成10/01换位

    73 moveFrontOneToLeft(a, i); //完成剩余左边的1全向最左边搬移操作

    74 break;75 }76 }77 }78

    79 //最后一个元素也是组合的一个,即所有的1(true)都到了数组的最右边

    80 combination.add(calcElement(a));81 returncombination;82 }83

    84 /**85 * 异或操作实现不开辟新的存储空间完成两个数的位置交换。86 *87 * @param a 待操作数所在的数组88 * @param x 待交换位置的第一个数在数组中的下标89 * @param y 待交换位置的第二个数在数组中的下标90 */

    91 private void oneZeroSwap(boolean a[], int x, inty){92 a[x] = a[x] ^a[y];93 a[y] = a[y] ^a[x];94 a[x] = a[x] ^a[y];95 }96

    97 /**98 * 判断10作01交换位置后,是否实现了数组a中右端的n个元素全为1(true),这个结果作为10/01换位结束标识99 *100 * @param a 10/01换位的输入数组101 * @param m 计算组合的元数据个数102 * @param n 计算组合的被选取元素个数103 * @return true表示10/01换位结束,false表示还可以继续104 */

    105 private boolean isAllZeroLeft(boolean a[], int m, intn){106 int gap = m -n;107 for(int i=0; i

    115 /**116 * 将10/01换位之后数组左边的全部1都搬移到数组的最左边。117 *118 * @param a 待操作的组合数组119 * @param end 指明搬移操作的范围,在end数组下标左边的进行搬移, 这个end的值小于数组的长度120 */

    121 private void moveFrontOneToLeft(boolean a[], intend){122 int oneCnt = 0;123 for(int i=0; i

    134 /**135 * 计算当前数组中的组合元素的值,数组元素为1(true)的对应的下标的全集,即为所需的一个组合元素值136 *137 * @param a 待操作的组合数组138 * @return 一个组合的值, 去掉了最后的一个逗号分隔符139 */

    140 privateString calcElement(boolean a[]){141 String elem = "";142 for(int i=0; i

    150

    151 /**152 * @param args153 * @throws Exception154 */

    155 public static voidmain(String[] args) throws Exception {156 int m = 5, n = 2;157 Combination combination = newCombination();158 ArrayList coms =combination.getCombinations(m, n);159 for(int i = 0; i

    展开全文
  • 组合生成类(Combination.java)import java.util.ArrayList;import java.util.Arrays;import java.util.List;/**** @author hymanz 506600909@qq.com**/public class Combination {private char[] bas...
  • 1.题目:组合数2 给定N个的正整数【可能有重复】,和目标数M,找出N中所有子集,使得每个子集的和是M,对于每个数,只能选一次,所有结果子集不能够重复。输入为2行,第一行为N和M,第二行为N个数,输出为总共的子集...
  • JAVA组合数

    2021-03-04 05:36:27
    public class AssociationTest {public static void main(String[] args) {int[] num = new int[] { 1, 2, 3, 4, 5...// 求3个组合count(0, str, num, 3);// 求1-n个组合countAll(0, str, num);}pub...
  • 如果用传统的for循环来写的话,很复杂,很难实现高中学过的排列组合数的显示,运算结果很简单,但是显示这些有可能的组合就比较困难了。 impo这段java代码是自己花了很长时间写的,基本java初学者都看的懂,不过理解...
  • import java.util.Arrays;//利用二进制算法进行全排列//count1:170187//count2:291656public class test {public static void main(String[] args) {long start=System.currentTimeMillis();count2();long end=...
  • 本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(C/Java)后进行提交。若题目中给出的源代码语言不唯一,则只需选择其一进行补全提交即可。复制后需将源代码中填空...
  • 开始需求:产生一堆数字. 然后我输入一值,这个值等于这些数中的一个,或是...在网上看到了下面这篇文章:后来朋友谈到2的N次方,然后就想到了一个求一个整数的组合数的算法:package suanfa;import java.util.Scanne...
  • java解决数字组合问题

    2021-03-21 09:36:15
    问题描述:输入1~9以内的几个数字,输出这些数字的多重组合。输入:1,2,3输出:123121323123问题分析:当输入为1输出1当输入为1 2输出1212当输入为1 2 3输出123121323123那么可以分析如下当输入1 2 3 4时做了以下...
  • 请尝试此代码,我希望它对您有用String a[] = new String[4];String b[] = new String[2];String[] ab = new String[a.length + b.length];int i, j, d, s = 0;@SuppressWarnings("resource")Scanner x = new ...
  • 计算组合数Time Limit: 1000 ms Memory Limit: 32768 KiBProblem Description计算组合数。C(n,m),表示从n个数中选择m个的组合数。计算公式如下:若:m=0,C(n,m)=1否则, 若 n=1,C(n,m)=1否则,若m=n,C(n,m)=1否则...
  • import java.util.Random;public String getCharAndNumr(int length){String val = "";Random random = new Random();for(int i = 0; i < length; i++){String charOrNum = random.nextInt(2) % 2 == 0 ? "char" ...
  • java枚举组合数

    2021-02-28 13:51:50
    利用递归的思想和组合数公式,可以实现组合数的枚举,代码如下:import java.util.ArrayList;public class Exhaustion {public static void main(String [] args){Exhaustion ex = new Exhaustion();ex.nchoosek(1,5...
  • 例如,如果n = 4且k = 2,则解为:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]Java解决方案public ArrayList> combine(int n, int k) {ArrayList> result = new ArrayList>();if (n <= 0 ...
  • Java 1056 组合数的和

    2021-11-10 01:29:09
    给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。 输入格式: ...
  • packagenet.kitbox.util...importjava.util.Iterator;importjava.util.LinkedList;@SuppressWarnings("rawtypes")publicclassCombineIteratorimplementsIterator{//源数据privateint[]source;//结果数组大小privatei...
  • 如下需求给出一个整形数组,要找出组合中最大的一个 比如121,12,212,21最大是 2122112121想起用冒泡排序比较方便于是列出如下代码可供参考public static void main(String[] args) {int a[]={121,12,212,21};...
  • 每日算法 最大 给定一组非负整数 nums,重新排列每个的顺序(每个不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你...java题解 class Solution { public String largestNumber(int[] num
  • 分享给大家供大家参考,具体如下:import java.util.random;public class passwordcreate {/*** 获得密码* @param len 密码长度* @return*/public string createpassword(int len){int random = this.createran...
  • importjava.util.ArrayList;importjava.util.List;//TODO:Auto-generatedJavadoc/***TheClassCombine.*/publicclassCombine{/***Testcombine.*测试用二进制方法求组合函数*/publicstaticvoidTestCombine(intcou...
  • import java.util.Random;public class GenerateRandomNumber {public static void main(String[] args) {System.out.println("生成的10为随机数为:" + getCharAndNumr...}/*** java生成随机数字和字母组合* @param...
  • * java生成随机数字和字母组合7位 * @param length[生成随机数的长度] * @return */ public static String getRandomNickname(int length) { String val = ""; Random random = new Rando
  • JAVA】递归求组合数算法

    千次阅读 2021-01-15 11:07:59
    public class h { //在n个球中,任意取出m个(不放回),求有多少种取法。 public static int f(int n,int m){ //n个取m个。 if(n<m) return 0; if(n==m) return 1;... if(m==0) return 1;...
  • 组合的计算公式如下:那么,计算排列或组合的数量,通过上面的公式就很容易就算出来了,其Java的实现如下:/*** 计算阶乘数,即n! = n * (n-1) * ... * 2 * 1* @param n* @return*/private static long ...
  • PTA组合数的和 Java

    2021-10-31 21:21:34
    L9 组合数的和 给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,324
精华内容 115,729
关键字:

java组合数

java 订阅
友情链接: globalvar.rar