由于可调功率仪器昂贵,所以用普通灯泡代替,但是只有小功率灯泡,在电量计量的时候需要大功率进行比较,所以想了办法用多个灯泡代替,手中有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;
}