Да, спасибо, работает нормально. Разве что клинит его, если сперва идут числа в массиве - больше указанной суммы - возвращает false на первой же проверке, на чем все и заканчивается.
Выложу код на Qt с выводом результата, вдруг кому-нибудь когда-нибудь пригодится =)
C++ (Qt)
void Schet::on_knopka_clicked()
{
int sum(ui->chisloX->text().toInt());
QVector<int> Y;
Y.push_back(15);
Y.push_back(14);
Y.push_back(9);
bool Z(FindSum(sum, Y, 0));
if(Z){
ui->vivod->append(QString("Успех. Заданная сумма: %1").arg(sum));
ui->vivod->append(QString(""));
}
else ui->vivod->append("Fail");
}
bool Schet::FindSum(int sum, const QVector<int> & vec, int from){
if (from >= vec.size()) return false;
int val = vec[from];
int num = sum / val;
if (!num) return false;
int rem = sum % val;
if (!rem){
ui->vivod->append(QString("Число: %1 ; Множитель: %2").arg(vec[from]).arg(num));
return true;
}
for (int i = 0; i < num; i++)
if (FindSum(rem + i * val, vec, from+1)){
ui->vivod->append(QString("Число: %1 ; Множитель: %2").arg(vec[from]).arg((sum-(rem + i * val))/vec[from]));
return true;
}
return FindSum(sum, vec, from + 1);
}