สมมติว่าเราได้รับอาเรย์จำนวนเต็ม เราต้องหาผลต่างระหว่างค่าสูงสุดและค่าต่ำสุดในอาเรย์ โดยต้องใช้แมโคร (macros) ในการแก้ปัญหา รับอินพุตจาก stdin และพิมพ์ผลลัพธ์ไป stdout
เช่น หาก array = {120, 589, 324, 221, 234} ผลลัพธ์จะเป็น "The answer is : 469"
ผลต่างระหว่างค่าสูงสุด 589 และค่าต่ำสุด 120 คือ 469
ขั้นตอนการแก้ปัญหา
- mini := infinity, maxi := -infinity
- วนลูปทุกค่า i ใน v:
- ถ้า mini > v[i] แล้ว mini := v[i]
- ถ้า maxi < v[i] แล้ว maxi := v[i]
- ans := maxi - mini
- พิมพ์ ans
ตัวอย่างโค้ด
#define minmac(a, b) a = min(a, b) #define maxmac(a, b) a = max(a, b) #define INF ((1 << 31)-2) #define input(a) cin >> a #define toStr(a) string("The answer is :") #define FOO(a, b) #define foreach(a, b) for (int i = 0; i < a.size(); ++i) #include <iostream> #include <vector> using namespace std; FOO(minmac, <) FOO(maxmac, >) int main(){ int n; cin >> n; vector<int> v(n); foreach(v, i) { input(v)[i]; } int mini = INF; int maxi = -INF; foreach(v, i) { minmac(mini, v[i]); maxmac(maxi, v[i]); } int ans = maxi - mini; cout << toStr(The answer is :) <<' '<< ans; return 0; }
อินพุต
5 120 589 324 221 234
เอาต์พุต
The answer is : 469