三个正整数的和是一个正整数 ,有多少种组合方法

由于可调功率仪器昂贵,所以用普通灯泡代替,但是只有小功率灯泡,在电量计量的时候需要大功率进行比较,所以想了办法用多个灯泡代替,手中有95w 60w 40w灯泡,合计做出一个1000w的功率仪器,所以有了下面的方法。

/*
*
* 三个正整数的和是一个正整数  有多少种组合方法 我这里三个数用的是 95  60  40  和是1000 
* 
* 下面是两种方法
*/

#include <stdio.h>

#define NUM1 95
#define NUM2 60
#define NUM3 40
#define SUM  1000

int method(int sum,int num1,int num2,int num3)
{
    if(sum <=0 || num1<=0 || num2<=0 || num3<=0){
        printf("[%s]:input param error\n",__FUNCTION__);
        return -1;
    }
    int i = 0;
    int j = 0;
    int z = 0;
    int flag = 1;  

    for(i=0; i<= sum/num1;i++){
        for(j=0; j<= sum/num2; j++){
            for(z =0; z<= sum/num3; z++){
                if(i*num1 + j*num2+ z*num3 == sum){
                    printf("i:%d   j:%d  z:%d\n",i,j,z);
                    flag = 0;
                }
            }

        }
    }
    if(flag){
        printf("There is no such combination\n");
    }
    return  0;
}

int method1(int sum,int num1,int num2,int num3)
{   
    if(sum <=0 || num1<=0 || num2<=0 || num3<=0){
        printf("[%s]:input param error\n",__FUNCTION__);
        return -1;
    }
    int i = 0;
    int j = 0;
    int z = 0;
    int flag = 1;   

    for(i = sum/num1;i>=0;i--){
        for(j = sum/num2;j>=0;j--){
            for(z = sum/num3;z>=0;z--){
                if(i*num1 + j*num2+ z*num3 == sum){
                    printf("i:%d   j:%d  z:%d\n",i,j,z);
                    flag = 0;
                }

            }
        }

    }

    if(flag){
        printf("There is no such combination\n");
    }
    return  0;
}

int main(int argc,char *argv[])
{
    int sum_value = (int)SUM;
    int num1 = (int)NUM1;
    int num2 = (int)NUM2;
    int num3 = (int)NUM3;

    method(sum_value,num1,num2,num3);
    //method1(sum_value,num1,num2,num3);

    return 0;
}

这里是组合的方法 x是95w灯泡的个数,j为60w灯泡个数,z为40w灯泡个数

i:0   j:0  z:25
i:0   j:2  z:22
i:0   j:4  z:19
i:0   j:6  z:16
i:0   j:8  z:13
i:0   j:10  z:10
i:0   j:12  z:7
i:0   j:14  z:4
i:0   j:16  z:1
i:4   j:1  z:14
i:4   j:3  z:11
i:4   j:5  z:8
i:4   j:7  z:5
i:4   j:9  z:2
i:8   j:0  z:6
i:8   j:2  z:3
i:8   j:4  z:0

在这里还遇到了一个有趣的问题,就是for循环的问题:猜一下z == ?

#include <stdio.h>

int main()
{
    int i = 0;
    int j = 0;
    int z = 0;

    for(;i<10;i++){
    for(;j<10;j++){
        printf("z=%d\n",z++);
    }
}

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40062917/article/details/80662391