請教一個問題,如下:
將一個數Y分成串列中的若干個數,使若干個數在串列中,且若干個數之和等于Y
例:
串列:2000,3000,4000,8000,20000,40000,60000
Y=20000,Y始終在串列中,分成若十個數的最大個數設為4,結果可以為:
{4000,8000,8000}{20000}
Y=20000,Y始終在串列中,分成若十個數的最大個數設為5,結果可以為:
{2000,2000,4000,4000,8000}{4000,8000,8000}{20000}
Y=40000,Y始終在串列中,分成若十個數的最大個數設為5,結果可以為:
{4000,4000,8000,4000,20000}{2000,2000,8000,8000,20000}{40000}{20000,20000}
多個結果,隨機回傳一種即可
uj5u.com熱心網友回復:
最簡單的演算法:數/10*份,輸出<份的部分和剩余部分,如:20000/10=2000,2000,2000,14000;40000/10=4000,4000,4000,4000,24000;
uj5u.com熱心網友回復:
你好,14000和24000都要在串列中哦
uj5u.com熱心網友回復:
給你寫一個簡單演算法你參考看,還可進一步修改為雙回圈的,上面10份的思路就不寫了
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;
}
uj5u.com熱心網友回復:
給你寫一個簡單演算法你參考看,還可進一步修改為雙回圈的,上面10份的思路就不寫了
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;
}
簡單演算法可滿足一般的分段(20000/4,20000/5,40000/5,40000/6,但是40000/4是無法實作的),
提升的演算法可滿足更合理的分段(40000/4=20000+8000+8000+4000)
之上除去要準備的資料和變數外,計算其實只有一連句:while (b<a.Count()) if (!a.Contains(aaa - a[b] * (aa - 1))) ++b; else break;
bb變數只是借以除錯觀察,實際使用完全可以省去。
改為嵌套回圈可以更合理分段,還不算最佳演算法,最佳演算法應當是全排列組合陣列元素,能較全面實作各種組合,避免遺漏,這思路只是腹稿。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/89091.html
標籤:C#
上一篇:求大神看一下需要怎么修改
