2009-09-03 6 views
-1

Ich weiß, dass dies kann leicht durch die Verwendungalle natürlichen Zahlen, die ein Vielfaches von 3 und 5 sind: Was ist der Fehler in dem folgenden Code

if(i%5 == 0 OR i%3 ==0) sum+=i; 

getan werden, aber was in der folgenden C# -Code ist falsch :

int sum = 0; 
    for(int i = 0, j = 0; i < 1000; i+=3, j+=5) 
    { 
     Console.WriteLine("i = " + i); 
     Console.WriteLine("j = " + j); 

     sum += i; 

     Console.WriteLine("Sum after adding i = " + sum); 

     if(j < 995 && j % 3 != 0) 
     { 
      sum += j; 
     } 

     Console.WriteLine("Sum after adding j = " + sum); 

    } 
+0

Traurig über diese setzen. Hast du die Summe auf 0 initialisiert? – vpram86

+0

Meine schlechte .. :) .. Entschuldigung! – vpram86

+0

@WefwfWefwe können Sie von überall starten. Würde mich freuen, jede Rückmeldung – Sandbox

Antwort

5

Die Anweisung j < 995 sollte wahrscheinlich j <= 995 sein, sonst werden Sie Ihrer Summe nicht 995 hinzufügen.

+0

ja. Das ist das Problem. Ich hätte es selbst herausfinden sollen. Vielen Dank. – Sandbox

+0

j <1000 wäre ein wenig reiner – xan

0

Dies ist nur ein pingelig, vielleicht, aber immer noch: „Alle“ und „niedriger als 1000“ ist nicht die gleiche Menge der natürlichen Zahlen, möchten Sie vielleicht etwas ändern.

+0

"Es besteht die Gefahr, dass dieselbe Nummer mehr als einmal hinzugefügt wird". Wie? – Sandbox

+0

Es ist nicht, Abwickeln ist falsch darüber. Ihre Prüfungen reichen aus, um zu verhindern, dass Sie die gleiche Zahl mehrmals hinzufügen (obwohl Ihr Schleifenentwurf unorthodox und beim ersten Lesen etwas verwirrend ist). –

1

Der offensichtliche Fehler ist, dass 995 ist ein Vielfaches von 5, die nicht hinzugefügt werden, während 996 und 999 sind Vielfache von 3, die hinzugefügt werden: die 1000 in der Schleife Bedingung und 995 in der if-Bedingung sollte sein die gleiche Nummer.

1

Auch, wenn Sie alle solche natürlichen Zahlen weniger als 1000 summieren möchten, warum 995 ausgenommen? Sie könnten

j <= 995 && j%3!=0 
0
for(int i = 0, j = 0; i < 15; i+=3, j+=5) 

Änderung dieses zu

for(int i = 0, j = 0; i <= 15; i+=3, j+=5) 

mit der <= (größer als oder gleich Operator)

und es funktioniert

Verwandte Themen