`

输入两个参数,N和M,用M个数字加起来等于N.

 
阅读更多

编程题:输入两个参数,N和M,用M个数字加起来等于N.

 

我理解成了从M个数中,找出和为N的组合。

 

public class SubSet {

    public static void main(String[] args) {
        int[] m = { 1, 2, 3, 4 };
        int n = 3;

//        getBinarySubSet(5);
        getGroupSumEqualN(m, n);
    }

    public static void getGroupSumEqualN(int[] m, int n) {
        // get list which contains integer < n;
        List<Integer> newM = new ArrayList<Integer>();
        for(int i : m) {
            if(i <= n)
                newM.add(i);
        }
        
        System.out.println(newM);

        // take subset
        int sum;
        int len = newM.size();

        for(int subSet = 0, backSubSet = 0; subSet < (0x1 << len); subSet = backSubSet + 1) {
            sum = 0;
            backSubSet = subSet;
            for(int i =0; i<len; i++) {
                if((subSet & 0x01) == 1) {
                    sum += newM.get(i);
                }
                subSet = subSet >> 1;
            }
            if(sum == n) {
                System.out.println(Integer.toBinaryString(backSubSet));
            }
        }
    }

    static List<Integer> getBinarySubSet(int n) {
        // sample : n = 3, get "000, 001, 010, 011, 100, 101, 110, 111".
        List<Integer> list = new ArrayList<Integer>();
        if(n < 1)
            return list;
        int i = 0x00;
        while(i < (0x01 << n)) {
            System.out.println(Integer.toBinaryString(i));
            list.add(i);
            i++;
        }
        return list;
    }
}

 

 

输入时:

[1, 2, 3]
11
100

 

 

就是1+2,和3的组合。其中用的关键了全枚举所有组合。

分享到:
评论

相关推荐

    求两个正整数m、n的最大公约数 Java语言实现

    1. **边界条件检查**:在`gcd`函数中,加入对n是否大于m的判断,以确保较小的数作为递归参数的第二个参数。 2. **异常处理**:增加对非法输入(如非正整数)的处理,提高程序的健壮性。 3. **性能测试**:使用大量...

    chengfabiao.zip_M?n

    这里的“M”和“n”可能是程序的输入参数,用户可以通过指定这两个值来生成不同大小的乘法表。例如,如果我们设置m=5,n=5,那么生成的乘法表将是5x5的,包含从1到5的所有乘积。 在描述中提到的“检测通过,绝对...

    你必须知道的495个C语言问题(PDF)

    3.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一 个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ...

    数字信号处理 计算两个序列的线性卷积Matlab算法

    在提供的代码`exa011006_conv.m`中,定义了两个序列x和h,长度分别为N和M,然后计算它们的线性卷积,结果存储在变量y中。接下来,代码使用`subplot`绘制了三个子图,分别显示了输入序列x[n]、滤波器h[n]和它们卷积后...

    使用函数打印n*n的乘法口诀表

    - 内外两个`for`循环分别控制行和列,实现了乘法表的打印逻辑。 - 外层循环变量`i`表示当前行号;内层循环变量`j`表示列号。当`j`小于等于`i`时,打印相应的乘法表达式。 3. **格式化输出**: - `printf`函数...

    任意N位和M位的乘法器VHDL实现(代码)

    然后,我们会在实体中声明这些参数以及输入(如`A`和`B`,分别代表N位和M位的二进制数)和输出(如`P`,代表乘积)信号。结构体中,我们可以采用分治策略,将乘法器分解为多个较小的乘法单元,如半加器和全加器,...

    算法设计与实验题解一本书的页码从自然数1开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如第6页用6表示而不是06或006。数字统计问题要求对给定书的总页码,计算出书的全部页码中分别用到多少次数字0,1,2,3,.....9。

    具体来说,我们需要设计一种算法,输入参数为一个正整数n,输出结果是0至9这十个数字各自出现的次数。每个页码都是以十进制形式表示,并且不包含任何前导零,即不会出现类似006这样的页码表示方式。 ### 解决方案一...

    计算两个序列的线性卷积程序

    如果两个序列`x[n]`和`h[n]`,其长度分别为N和M,它们的线性卷积`y[n]`可以通过以下方式计算: ```markdown 对于所有 n = 0, 1, ..., (N+M-1) y[n] = Σ (x[k] * h[n-k]) 对于所有 k = 0, 1, ..., min(n, M+N-1) `...

    实验3分支程序实验.doc

    第一个程序是一个猜数游戏,预设了一个数字字符M,并要求用户输入一个数字字符N。程序会根据用户输入的N与预设的M进行比较,从而判断并显示相应的提示。具体实现如下: 1. 初始化数据段,将M和提示信息存储在内存中...

    Java实现n位数字的全排列

    它接受一个整数数组`a`和两个整数参数`m`和`n`,分别表示当前处理的起始位置和结束位置。当`m`等于`n`时,表示所有数字都已经排列好,此时会输出这个排列并增加计数器`k`。如果`m`不等于`n`,则遍历从`m`到`n`的所有...

    整数划分,并输出结果

    - 如果`n`等于`m`,则递归地计算`n`被分成最大不超过`m-1`的所有方式的总数加1(加上`n`本身这一种划分)。 - 如果`n`大于`m`,则递归地计算两种情况的总和:一是`n`被分成最大不超过`m-1`的所有方式;二是`(n-m)`...

    任意N位和M位的乘法器VHDL实现

    输入端口通常为两个多位二进制数(乘数和被乘数),输出端口通常是乘积。你可能还需要额外的控制信号,如启动和完成标志。 3. **逻辑操作**:在`architecture`部分,利用VHDL的算术运算符(如`*`)和位操作符(如`&...

    数字信号处理与MATLAB实现

    - `impseq.m`:生成单位脉冲序列,输入参数包括序列的起始点`ns`、结束点`nf`和中心点`n0`。 - `stepseq.m`:生成单位阶跃序列,同样需要指定起始点、结束点和中心点。 - `sigadd.m`:实现两个信号的相加操作,...

    数字信号处理实验报告 MATLAB.docx

    数字滤波器通常由差分方程描述,例如`∑a_ky(n-k) = ∑b_mx(n-m)`,其中`a_k`和`b_m`是系数,`y(n)`和`x(n)`分别是输出和输入序列。在实验中,使用`a=[1,-1,0.9]`和`b=1`的滤波器参数来展示单位抽样响应。 通过...

    杨辉三角文档

    它是一种由数字构成的三角形阵列,其中每个数字是其正上方与左上方两个数字之和。这个三角形的每行代表了一个二项式系数的序列。 #### 2. 杨辉三角的性质 - **第n行有n+1个元素**:每一行的第一个和最后一个数字都...

    第5周_M脚本与M函数_.pdf

    - **定义**: 代码元胞是指在M文件中使用`%%`标记的一段代码,便于管理和运行特定部分的代码。 - **使用场景**: 在编写较长的脚本时,可以通过代码元胞的方式组织代码,使得代码更加模块化和易于管理。 #### 五、M...

    算法关于格雷码的程序

    参数 `P` 表示当前处理的编码数组,`m` 和 `n` 分别表示数组中需要处理的起始位置和结束位置。 ```c void perml(int *P, int m, int n) { if (m &gt; n) { // 基本情况 for (int k = 1; k &lt;= n; k++) // 打印当前...

    FX2N-4AD 习题2.zip

    该模块与FX系列PLC配合使用,能够实现模拟量和数字量的无缝转换,为自动化系统提供强大的数据处理能力。 二、FX2N-4AD模块特性 1. 高精度:FX2N-4AD提供高达12位的分辨率,确保采集数据的精确性。 2. 快速响应:...

    rsa.rar_RSA解密_ras 加密_ras加密_rsa 加密_加密解密

    首先,RSA算法基于两个不同的大素数p和q,它们的乘积n=p*q。计算n的欧拉函数φ(n)=(p-1)*(q-1),然后选取一个与φ(n)互质的整数e作为公钥,同时计算e关于φ(n)的模逆d作为私钥。公钥(e, n)用于加密,私钥(d, n)用于...

Global site tag (gtag.js) - Google Analytics