我正在试图弄清楚如何有效地计算出所有可以作为某个集合的线性组合产生的数字,比如前几个丰富的数字(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;}
}发布于 2011-12-25 11:43:54
我不知道你使用的是什么语言,但是如果你不知道你可能需要深入到多少层,那么你应该考虑递归(只要它不是成百上千的;你会搞砸堆栈)。
如果你不熟悉递归,你可以在这里调用函数本身。这里有一个愚蠢的例子。
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;
}递归可能很棘手,但有时它是适合这项工作的工具。
https://stackoverflow.com/questions/8628075
复制相似问题