我有以下情形:C#隨機算法,直到滿足條件
- 從一定範圍內產生
n
數字隨機數 - 總和的所有數字
- 檢查是否
sum == x
(x爲數字由用戶設置) - 如果
sum != x
然後繼續運行循環 - 如果
sum == x
,則顯示隨機數列表最高達到x
基於這個邏輯,我能夠這樣做,但它需要永遠的實現結果,有沒有更好的方法來解決這個問題?
static void Main(string[] args)
{
Console.WriteLine("starting...");
List<int> checkList = generate(5);
while(!checkSum(checkList, 100))
{
checkList = generate(5)
}
Console.WriteLine("done!");
}
private static bool checkSum(List<int> n, int sum)
{
if(n.Sum() == sum)
{
return true;
}
else
{
return false;
}
}
public static List<int> generate(int n)
{
Random rng = new Random();
List<int> list = new List<int>();
for (int i = 0; i < 5; i++)
{
//int ran = some random number
list.Add(ran);
}
return list;
}
EDIT
我在這裏的情況是,以獲得總計爲100組合的數量是從輸入由用戶所採取的隨機整數的n
組合。所以程序將給出n
數目的可能的組合,總結高達100
可能的組合:
- 25 + 37 + 9 + 20 + 9 = 100
- 46 + 21 + 13 + 8 + 12 = 100
您的場景是算法(解決方案),而不是問題。這種算法當然很慢,因爲它採用了強力方法。你用一個更好的算法試圖解決什麼問題? – Tim
'它需要永遠達到結果'很明顯。有一種情況(所有項目= 20)將使您的條件成立。其實20是獨家,所以我不知道這是如何完成。 – Jonesopolis
打印出不工作的序列(不僅僅是成功的序列),你會看到代碼中的錯誤。 – Servy