Last active
August 29, 2015 14:07
-
-
Save amoshyc/9587c3672ef01f254d12 to your computer and use it in GitHub Desktop.
max_of_array.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
上個教學中使用 flag 的那種技巧是非常非常頻繁地使用的,以下舉幾個簡單例子。 | |
*/ | |
/* | |
題目 1: | |
單筆測資,給你一個長度為 10 的序列,序列中的每一項都是正整數(保證 int 可存),請輸出序列中的最大值。 | |
# Sample Input | |
6 5 4 8 9 3 2 1 7 0 | |
# Sample Output | |
9 | |
*/ | |
#include <stdio.h> | |
int main() { | |
int a[10]; | |
for (int i=0; i<10; i++) | |
scanf("%d", a[i]); | |
int max = -1; | |
for (int i=0; i<10; i++) | |
if (a[i] > max) | |
max = a[i]; | |
printf("%d\n", max); | |
return 0; | |
} | |
/* | |
想法為,若遇到一個數比 max 大,就將 max 換成那個數。 | |
max = -1; | |
i = 0 時: a[0]=6 > max=-1 所以 max = a[0] = 6; (a[0] 將 max 替換掉) | |
i = 1 時: a[1]=5 < max=6,所以 max 值不變。 | |
i = 2 時: a[2]=4 < max=6,所以 max 值不變。 | |
i = 3 時: a[3]=8 > max=6,所以 max = a[3] = 8; (a[9] 將 max 替換掉) | |
i = 4 時: a[4]=9 > max=9 所以 max = a[4] = 9; (a[9] 將 max 替換掉) | |
i = 5 時: a[5]=3 < max=9,所以 max 值不變。 | |
i = 6 時: a[6]=2 < max=9,所以 max 值不變。 | |
i = 7 時: a[7]=1 < max=9,所以 max 值不變。 | |
i = 8 時: a[8]=7 < max=9,所以 max 值不變。 | |
i = 9 時: a[9]=0 < max=9,所以 max 值不變。 | |
所以最終迴圈跑完後,max 所存的值就是陣列中的最大值。 | |
*/ | |
/* | |
因為題目保證序列中的每一項都是正整數,所以我們才能寫 int max = -1; | |
然後保證在陣列的第一項(a[0])時 a[0] > max ,所以 max = a[0]。之後一直下去,最後 max 必為最大的那個。 | |
若題目沒有保證呢?只保證 int 存得下。 | |
# Sample Input | |
-1 -2222222 9 4 22222222 3 2 1 6 10 | |
# Sample Output | |
22222222 | |
只要稍為更動一下迴圈就可以了。 | |
*/ | |
int max = a[0]; | |
for (int i=1; i<10; i++) /*注意,i 是從 1 開始。*/ | |
if (a[i] > max) | |
max = a[i]; | |
/* | |
題目 2 | |
若我們定義 max-diff 為一個序列中,最大的「相鄰兩數差」, | |
現給你一個長度為 5 的序列,保證每一項 int 可存,請輸出這個序列的 max-diff。 | |
# Sample Input | |
1 2 6 5 8 | |
# Sample Ouput | |
4 | |
這個序列中,相鄰兩數差有 (2-1) = 1; (6-2) = 4; (6-5) = 1; (8-5) = 3; | |
其中最大的是 4。 | |
*/ | |
#include <stdio.h> | |
int abs(int i) { /*絕對值函式:abs(-1) = 1; abs(-6) = 6; abs(3) = 3; */ | |
if (i < 0) | |
return -i; | |
return i; | |
} | |
int main() { | |
int a[5]; | |
for (int i=0; i<10; i++) | |
scanf("%d", a[i]); | |
int max_diff = -1; | |
for (int i=0; i<5-1; i++) | |
if (abs(a[i+1] - a[i]) > max_diff) | |
max_diff = abs(a[i+1] - a[i]); | |
/* | |
也可寫成: | |
int max_diff = abs(a[1] - a[0]); | |
for (int i=1; i<5-1; i++) | |
if (abs(a[i+1] - a[i]) > max_diff) | |
max _diff = abs(a[i+1] - a[i]); | |
*/ | |
printf("%d\n", max_diff); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment