2016-05-28 6 views
-3

Wie berechne ich die Häufigkeitszählung für jede Anweisung (d. H. Wie lange jede Anweisung gelesen/ausgeführt wird) im folgenden C-Code.
Die Häufigkeitszählung jeder Anweisung muss in Form von 'n' geschrieben werden.Berechnen der Häufigkeitszählung für jede Anweisung im folgenden C-Code

for(i=1;i<=n;i++) 
    for(j=1;j<=i;j++) 
      for(k=1;k<=j;k++) 
       x=x+1; 
+2

Huh, Schulaufgabe? –

+0

Nein. Ich versuchte einige zufällige knifflige Frage aus dem Netz auf C-Programmierung zu lösen und fand dies. Ich kenne bereits die Antwort auf die ersten beiden Aussagen (wenn ich richtig liege). n + 1 bzw. n (n + 1)/2. @ HiI'mFrogatto – d02d33pak

+0

Tipp: '1 + 2 + 3 + ..... + N = (N + 1) * N/2' – 4386427

Antwort

2

Sehen Sie diese Weise maximal,

for(i=1;i<=n;i++) // Executes n times 
    for(j=1;j<=i;j++) // Executes i times for every i -> (1 + 2 + 3 + 4....n) 
      for(k=1;k<=j;k++) // Executes j times for every i,j ---> (1+(1+2)+(1+2+3).....(1+2+3...n)) 
       x=x+1; // Executes every time for every i,j,k ---> (1+(1+2)+.....(1+2+3...n) 

So, you can figure out from this that : 

n + n*(n+1)/2 + (n+(n-1)2+(n-2)3.....(1)n)*2 ... = n + n(n+1)/2+ ((n)(n+1)(n+2)/6)*2 .. Das ist Ihre Antwort.

+0

Ich denke, Sie haben die Gesamtzahl der Male geschrieben, die alle Anweisungen ausgeführt werden. Recht? – d02d33pak

+0

Ja. Das ist was du wolltest, oder? –

+0

@DeepakTalan: Ich habe es in beide Richtungen geschrieben. Ich habe geschrieben, wie oft jeder Befehl ausgeführt wird und wie oft alle Befehle im vollständigen Code ausgeführt werden. –

1
  • Die erste for-Schleife wird n-mal ausgeführt.
  • Die zweite for-Schleife wird ausgeführt: 1 + 2 + 3 + ..... + n = n (n + 1)/2
  • Die dritte for-Schleife wird ausgeführt: Σ j (j + 1)/2 für j = 1 bis n, dh 1 + 3 + 6 + 10 + .. + n (n + 1)/2. Dies nennt man die Dreiecksfolge und die Summe ist n (n + 1) (n + 2)/6.
+0

Ich denke, das ist, was ich gesucht habe. Vielen Dank. – d02d33pak

+0

Sollte das nicht die richtige Antwort sein als die, die derzeit als richtige Antwort gekennzeichnet ist? Ich habe Ihnen die tatsächlich berechnete Summe für alle 3 Aussagen in Form von n zur Verfügung gestellt, während die andere nicht. – Piyg

+0

Omg. Das kann nicht passieren. Ich weiß, dass Sie sich alle nach Reputationspunkten sehnen, aber fangen Sie nicht an, unprofessionell zu handeln. Zuerst kommt er zu mir und erklärt, warum seine Antwort richtig ist, jetzt Sie. Ich habe deine Antwort zunächst als richtig markiert, aber dann hat er erklärt, dass er das gleiche geschrieben hat, also habe ich seine markiert, weil er vorher geantwortet hat. Und jetzt sagst du mir, dass es dir besser geht und dass es richtig ist. – d02d33pak

1

starten, indem ich gerade auf der Suche

for(i=1;i<=n;i++) 
    for(j=1;j<=i;j++) 
     expression; 

Es wird gehen wie:

for(i=1;i<=n;i++) 
    // i=1, 2, ..., n Total = n 
    for(j=1;j<=i;j++) 
     expression; 
     // i=1 -> j=1    Total = 1 
     // i=2 -> j=1, 2   Total = 2 
     // ... 
     // i=n -> j=1, 2, ..., n Total = n 

So ist die expression ausgeführt wird 1 + 2 + ... + n-mal die (n+1)*n/2 ist

Jetzt können Sie die Häufigkeit der einzelnen Ausdrücke berechnen.

i=1; // 1 
i<=n; // n+1 
i++; // n 
j=1; // n 
j<i; // ((n+2)*(n+1)/2) - 1 (2+3+...+(n+1)) 
j++; // (n+1)*n/2 

mit der gleichen Methode können Sie die for(k=1;k<=j;k++) hinzufügen und die Frequenz neu berechnen.

Verwandte Themen