2014-02-09 92 views
0

我工作的問題之一,我原來的計劃看起來像這樣歐拉計劃Q1計劃意想不到的結果

int multiplesof=1000,count=0, multiple1 = 3, multiple2 = 5,val1,val2,sum=0; 

while (count < multiplesof) 
{ 
    if (count % multiple1 == 0) 
     sum = sum += count; 
    if (count % multiple2 == 0) 
     sum = sum += count; 
    count++; 
} 
Console.Out.WriteLine(sum + " is the sum of all multiples"); 
Console.In.ReadLine(); 

它給我的266333.解決這被證明是錯誤的,難倒我看着谷歌。我已經通過以下循環獲得了正確的值233168。但對我來說,他們看起來像是做了完全一樣的事情。任何人都可以請解釋他們爲什麼提出不同的答案?

while (count < multiplesof) 
{ 
    if (count % multiple1 == 0 || count % multiple2 == 0) 
     sum = sum += count; 
    count++;    
} 
+0

你的下面的代碼是正確的。試試... –

+1

也不需要'sum = sum + = count;'。 '+ ='已經意味着添加和分配。只需使用'sum + = count;' – Rotem

+0

也不需要太多的代碼:'Enumerable.Range(1,1000 - 1).Where(x =>(x%3)== 0 ||(x %5)== 0).Sum()' –

回答

5

由於您添加了兩次,如果這是雙方3和5的倍數,當它是15

另一種解決方案,也是一個擾流板,如果你要嘗試自己解決它像:

int result = 3 * (999/3 * (999/3 + 1)/2) + 5 * (999/5 * (999/5 + 1)/2) - 15 * (999/15 * (999/15 + 1)/2);

0

試想一下由兩個3整除數的nd 5,比如15。你的第一次嘗試將它們計數兩次。