Skip to content

Instantly share code, notes, and snippets.

@amoshyc
Last active August 29, 2015 14:07
Show Gist options
  • Save amoshyc/9587c3672ef01f254d12 to your computer and use it in GitHub Desktop.
Save amoshyc/9587c3672ef01f254d12 to your computer and use it in GitHub Desktop.
max_of_array.c
/*
上個教學中使用 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