我试图弄清楚如何有效地计算出所有可以作为某些集合的线性组合产生的数字,比如前几个数字(12,18,20,24)。问题是我目前想要接近它的方法是遍历所有数字a * 12 + b * 18 + c * 20 + d * 24,其中总和不超过100.现在我想到了两种方法。一个乘法嵌套while循环或一个while循环,它根据while循环顶部的条件递增不同的东西。我对这两种方法的问题是我不知道在运行之前我需要多少个条件或嵌套循环,因为我不知道有多少不同的数字我将要求和。是否有任何方法可以编写我的程序,使其嵌套n次n个数,或者n个条件为n个数。
以下是开关块的概要:
int count=1;
while(true){
if(num2<smal){
switch(count){
case 1:
a++;
break;
case 2:
b++;
break;
case 3:
c++;
break;
case 4:
d++;
break;
}
}
else {
switch(count){
case 1:
if(a!=0){
a=0;
b++;
}
else{count++;}
break;
case 2:
if(b!=0){
b=0;
c++;
count--;
}
else{count++;}
break;
case 3:
if(c!=0){
c=0;
d++;
count--;
}
else{count++;}
break;
case 4:
break;
}
}
//num is update here
if(count==4){break;}
}
答案 0 :(得分:0)
我不知道你正在使用什么语言,但是如果你不知道你可能需要多少级别,那么你应该考虑递归(只要它不是数百或数千;你会吹掉堆栈。)
如果你不熟悉递归,那么它就是你自己调用函数的地方。这是一个愚蠢的例子。
Result doStuff(Stuff stuff, int level) {
SubResult sr = null;
if(stuff > 0) {
sr = doStuff(stuff, level -1);
}
Result r = interesting_calculation(stuff, sr);
return r;
}
递归可能很棘手,但有时它是适合工作的正确工具。