2016-03-15 64 views
-6

我想要數組中的數字的總和並且不超過1002我該如何解決它? 它不是要緊的總結所有的數字,但只有那些誰出線在C中總結一個整數數組#

我這樣做的,但我認爲這是不正確的做法

List<int> list = new List<int> { 4, 900, 500, 498, 4 }; 
     int sum = list.Skip(2).Take(3).Sum(); 
     Console.WriteLine(sum); 
     Console.ReadLine(); 
+1

爲什麼'Skip'和'Take'?不知道你在這裏試圖達到什麼。 –

+2

'int sum = list.Where(x => x <1002).Sum();' – thumbmunkeys

+1

在您的測試代碼中,沒有超過1002限制的值。那麼你想要達到的究竟是什麼? – HimBromBeere

回答

0

目前尚不清楚你想要什麼?如果你想使之停止總結,總結一些數字,當它到達1002,您可以:

List<int> list = new List<int> { 4, 900, 500, 498, 4 }; 
var lst = list.Skip(2).Take(3); 

int sum = 0; 

foreach (int num in lst) 
{ 
    int sum2 = sum + num; 

    if (sum2 > 1002) 
    { 
     break; 
    } 

    sum = sum2; 
} 

Console.WriteLine(sum); 

,或者你可以

List<int> list = new List<int> { 4, 900, 500, 498, 4 }; 
var lst = list.Skip(2).Take(3); 

int sum = 0; 

foreach (int num in lst) 
{ 
    sum += num; 

    if (sum >= 1002) 
    { 
     break; 
    } 
} 

Console.WriteLine(sum); 

第一個將停止,如果通過添加一個數字它將超過1002,而第二個將停止後達到1002.

請注意,這兩個都不能直接在LINQ中直接完成。

+0

然而,當我認爲OP需要的總和應該*精確* 1002時,這些方法都不會停止。 – HimBromBeere

+0

@HimBromBeere如果他想解決[揹包問題](https://en.wikipedia.org/wiki/Knapsack_problem)那麼這是另一個問題:-) – xanatos

+0

我認爲OP「Skip」和「Take」是一個嘗試解決問題。 P.S .:和一些隨機[揹包問題解決方案](http://stackoverflow.com/q/8125309/1997232)。 – Sinatr