Ich habe einen Code, der die Anzahl der Peaks und ihre gegebenen Größen ausgibt. Die Eingabe hat die Form einer einzelnen Zeile, die zufällige Ganzzahlen enthält, die durch Leerzeichen voneinander getrennt sind. Ein Peak ist nur dann definiert, wenn er direkt vorangeht und um einen kleineren Wert folgt. Beispiele:Code misst Peaks nicht korrekt
0 4 18 18 26 40 40 29 25 2 0 //has one peak of magnitude 40.
20 10 20 /*has no peaks, because both 20's are either not
preceded or followed by a smaller number.*/
der Code nicht richtig verhalten, wenn die Eingangsdaten, c
, mit einem rückläufigen Menge von Zahlen beginnen. zum Beispiel gibt die Eingabe: 9 8 7 6 5 4
eine Spitze von "9" zurück, wenn sie keine Größe zurückgeben sollte. eine andere Situation, in der es sich falsch verhält, ist, wenn wir die folgende Eingabe haben: 10 10 10 5 5 5 12 12 12 -1
. es gibt eine Größe von "10" zurück, während es wiederum keine Größe zurückgeben sollte, weil es die Bedingungen eines Peaks nicht erfüllt.
Folgendes ist der Code:
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 0;
int c = 0;
int counter = 0;
scanf("%d", &c);
printf("Number Magnitude\n");
while (c >= 0){
if ((b > a) && (b > c)) { //to check if we have a peak
counter++;
printf("%4d%11d\n", counter, b);
a = b;
b = c;
scanf("%d", &c);
}
else if ((a < b) && (b == c)) {
b = c;
scanf("%d", &c);
}
else {
a = b;
b = c;
scanf("%d", &c);
}
}
}
i bevorzugen das Niveau der Codierung so minimal wie möglich zu halten, da ich nicht mehr als Schleifen und wenn Aussagen in dieser Phase getan haben.
konnte man nicht '' scanf() 'nach all dem' if else' Block ?? –
für Ihr 4. Beispiel '10 10 10 5 5 5 12 12 12 -1 'wenn das letzte Element eine positive Zahl kleiner als' 12 'ist, sagen Sie' 5 'sollte die Spitze nicht' 12 'sein? –
Es kann leicht mit einem Array getan werden, aber zuerst muss ich die Problembeschreibung klar verstehen. –