解决方案 »

  1.   

    有一个思路与楼主分享,这里比较简单的是用三重循环,从最小的2作为入口,39最多只能由39/2个2相加,最多由39/3个3相加,最多由39/4个4相加,那么以这三个位边界循环去判断就可以了,希望楼主先理清思路了自己尝试去写之后,然后看下面的代码:public static void main(String[] args) {
    int sum = 39;
    int count = 0;
    for (int i = 0; i <= sum / 4; i++) {
    for (int j = 0; j <= sum / 3; j++) {
    for (int k = 0; k <= sum / 2; k++) {
    if (39 == i * 4 + j * 3 + k * 2) {
    System.out.println(i + "*4+" + j + "*3+" + k + "*2=39");
    count++;
    }
    }
    }
    }
    System.out.println("一共有" + count + "次");
    }输出结果:
    0*4+1*3+18*2=39
    0*4+3*3+15*2=39
    0*4+5*3+12*2=39
    0*4+7*3+9*2=39
    0*4+9*3+6*2=39
    0*4+11*3+3*2=39
    0*4+13*3+0*2=39
    1*4+1*3+16*2=39
    1*4+3*3+13*2=39
    1*4+5*3+10*2=39
    1*4+7*3+7*2=39
    1*4+9*3+4*2=39
    1*4+11*3+1*2=39
    2*4+1*3+14*2=39
    2*4+3*3+11*2=39
    2*4+5*3+8*2=39
    2*4+7*3+5*2=39
    2*4+9*3+2*2=39
    3*4+1*3+12*2=39
    3*4+3*3+9*2=39
    3*4+5*3+6*2=39
    3*4+7*3+3*2=39
    3*4+9*3+0*2=39
    4*4+1*3+10*2=39
    4*4+3*3+7*2=39
    4*4+5*3+4*2=39
    4*4+7*3+1*2=39
    5*4+1*3+8*2=39
    5*4+3*3+5*2=39
    5*4+5*3+2*2=39
    6*4+1*3+6*2=39
    6*4+3*3+3*2=39
    6*4+5*3+0*2=39
    7*4+1*3+4*2=39
    7*4+3*3+1*2=39
    8*4+1*3+2*2=39
    9*4+1*3+0*2=39
    一共有37次
      

  2.   


    //计算从2, 3, 4 三个数中任意取值相加(可以重复),要求它们相加后的和为39的情况有多少种
    class Demo1
    {
    public static void main(String[] args){
    /*
    一、2 * a + 3 * b + 4 * c = 39
    二、因为39是奇数,必须有1个3,上面式子简化为2 * a + 3 * b + 4 * c = 39 - 3 = 36
    三、所以得出三个不等式:0《a《18 、 0《b《12 、 0《c《9
    四、三个不等式变成三层循环结合计数器,就可以求出结果
    */
    int count = 0;
    int number;
    for(int i = 1;i <= 18;i++){
    for(int j = 1;j <= 12;j++){
    for(int k = 1;k <= 9;k++){
    number = 2 * a + 3 * b + 4 * c
    if(number == 36){
    count++;
    }
    }
    }
    }
    System.out.println("从2, 3, 4 三个数中任意取值相加(可以重复),要求它们相加后的和为39的情况有:"+count+"种");
    }
    }
      

  3.   

    你确定只是顺序不同也算?
    如果这样的话,这就是个Fibonacci数列吧。。下面的程序对于n>=6有效int[] a = {1, 1, 2, 2};
    int n = 39, i = -1;for (n -= 5; n > 0; n--) {
    i = (i + 1) % 4;
    a[i] = a[i] + a[(i + 1) % 4] + a[(i + 2) % 4];
    }System.out.println(a[i]);
      

  4.   

    这是个类似于百钱买百鸡的问题,我们可以将所有的可能性都尝试一遍,看看那种组合可以满足要求即可,下面是代码,仅供参考
    public class XX
    {
    public static void main(String[] args) {
    int i,j,k;
    for(i=0;i<=9;i++){//这层循环涉及4的个数,39/4=9,4最多有9个
    for(j=0;j<=13;j++){//这层循环涉及3的个数,39/3=13
    for(k=0;k<=19;k++){//这层循环涉及2的个数,39/2=19
    if(4*i+3*j+2*k==39){
    System.out.println("这是一个解决方案:");
    System.out.println("4*"+i+"+3*"+j+"+2*"+k+"=39");
    //这里用乘法的形式输出,也可以改成加法形式输出
    }
    }
    }
    }
    }
    }