我有一個代碼可以打印出峯值的數量和它們的給定量值。輸入形式爲單行,其中包含由空格分隔的隨機整數。只有在之前和之後的的值較小時,峯才被定義爲如此。 例子:代碼沒有正確評估峯值
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.*/
代碼無法正確表現當輸入數據,c
,便從一組數字的下降。例如, 輸入:9 8 7 6 5 4
返回一個「9」的峯值,當它不應該返回任何幅度。 行爲不正確的另一種情況是當我們有以下輸入:10 10 10 5 5 5 12 12 12 -1
。它返回一個「10」的數量級,同樣,它不應該返回任何數量級,因爲它不符合峯值條件。
以下是代碼:
#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);
}
}
}
我寧願保持編碼儘可能最小的水平,因爲我沒有做過比循環,如果在這個階段語句的。
難道你不能在所有'if else'塊之後寫單個'scanf()'嗎? –
你的第四個例子'10 10 10 5 5 12 12 12 -1'如果最後一個元素是小於'12'的正數,說'5'不應該是'12'? –
它可以很容易地使用數組完成,但首先我必須清楚地瞭解問題描述。 –