给定方程:
K = Ap + Bq + Cr + Ds.
我试过的解决方案:
我们已经知道的术语:A、B、C、D、K
在给定 p, q, r 的情况下找到术语 s;
p=0, q=0, r=1;
compute() => s = (K - Ap - Bq - Cr)/D;
继续直到s 变为 < 0; 对于所有项 p=0, q=0, r=1...n;
同样继续,直到s 变为 < 0; 对于 p=0, q=1..n, r=1...n 的所有项;
和,
最后,继续直到s 变为 < 0; 对于 p=1..n、q=1..n 和 r=1..n 的所有项;
编码 3 个循环用于更新 p、q 和 r。
如果 K 变大,例如 1000...、8145、45000 等,则需要更多时间来计算;
请不要建议外部库...我正在寻找编码解决方案。
示例片段
for (int i = 0; i < preSpecifiedIterations; i++)
{
p = i;
if (A * p > K) //Exit condition ; if Ap > K
break;
for (int j = 0; j < preSpecifiedIterations; j++)
{
q = j;
if (B * q > K) //Exit condition ; if Bq > K
break;
for (int k = 1; k < preSpecifiedIterations; k++)
{
r = k;
// compute s given p, q, and r;
s = (K - (A * p) - (B * q) - (C * r)) / D;
if (s < 0) //Exit condition ; don't process if s < 0 i.e negative values
break;
else
...
}
}
}
另外,如果有人注意到:preSpecifiedIterations -> 是否可以确定在计算之前需要多少次迭代?
有没有更好的算法来解决上述问题?
非常感谢阅读。