Я пытаюсь понять, как эффективно вычислить все числа, которые могут быть получены как линейная комбинация некоторого набора, скажем, первых нескольких обильных чисел (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;}
}