int[] a = { 2000, 3000, 4000, 8000, 20000, 40000, 60000 };
int aa = 4, aaa = 40000, b = 0, bb = 0, d = a.Count(), dd = 0;
while (bb < d)
{//缘由https://bbs.csdn.net/topics/395248956
dd = aaa - a[b] * (aa - 1);
if (aaa > 0 && !a.Contains(dd)) ++b; else break;
if (b >= d || dd < 0)
{
if (bb > 0) { aaa += a[bb - 1]; aa+=1; }
if (aaa > a[bb]) { b = 0; aaa -= a[bb++]; aa-=1; } else break;
}
}
之下简单算法可满足一般的分段(20000/4,20000/5,40000/5,40000/6,但是40000/4是无法实现的),之上提升的算法可满足更合理的分段(40000/4=20000+8000+8000+4000)
int[] a = { 2000, 3000, 4000, 8000, 20000, 40000, 60000 };
int aa = 4, aaa = 20000, b = 0, bb = 0;
while (b<a.Count()) {
bb = aaa - a[b] * (aa - 1);
if (!a.Contains(bb)) ++b; else break;
}