โจทย์
ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหาจำนวนค่าผิดปกติ (anomalies) ในอาร์เรย์ที่กำหนด
ตัวเลขถือเป็นค่าผิดปกติในอาร์เรย์ หากค่าสัมบูรณ์ของความต่างระหว่างตัวเลขนั้นกับตัวเลขอื่นๆ ทั้งหมด มากกว่าตัวเลข k ที่กำหนด มาดูตัวอย่างกัน
อินพุต
arr = [3, 1, 5, 7] k = 1
เอาต์พุต
4
ค่าสัมบูรณ์ของความต่างระหว่างทุกตัวเลขกับตัวเลขอื่นๆ มากกว่า k
อัลกอริธึม
- กำหนดอาร์เรย์
- วนลูปผ่านอาร์เรย์
- เลือกองค์ประกอบและวนลูปผ่านอาร์เรย์อีกครั้ง
- หาค่าสัมบูรณ์ของความต่างระหว่างสองตัวเลข
- ถ้าไม่มีค่าสัมบูรณ์ของความต่างใดๆ น้อยกว่าหรือเท่ากับ k ให้เพิ่มตัวนับค่าผิดปกติ
- เลือกองค์ประกอบและวนลูปผ่านอาร์เรย์อีกครั้ง
การนำไปใช้งาน
ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++
#include <bits/stdc++.h>
using namespace std;
int getAnomaliesCount(int arr[], int n, int k) {
int count = 0;
for (int i = 0; i < n; i++) {
int j;
for (j = 0; j < n; j++) {
if (i != j && abs(arr[i] - arr[j]) <= k) {
break;
}
}
if (j == n) {
count++;
}
}
return count;
}
int main() {
int arr[] = {3, 1, 5, 7}, k = 1;
int n = 4;
cout << getAnomaliesCount(arr, n, k) << endl;
return 0;
}
ผลลัพธ์
หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
4