โจทย์
ได้รับอาร์เรย์ arr[] ขนาด n ที่ประกอบด้วยค่าบวก ทางเราต้อง หาค่าสูงสุดในอาร์เรย์โดยไม่ใช้ตัวดำเนินการเชิงสัมพันธ์ (Relational Operators)
ตัวอย่าง
Input: arr[] = {5, 1, 6, 7, 8, 2}
Output: 8
แนวทางแก้ปัญหา
เนื่องจากต้องเปรียบเทียบค่าโดยไม่ใช้ตัวดำเนินการตรรกะ เราจะใช้วิธี การลบซ้ำ (Repeated Subtraction) ตัวเลขที่คงอยู่นานที่สุด (ต้องลบหลายครั้งจนถึงศูนย์) จะเป็นตัวเลขที่มากกว่า
ขั้นตอน:
- ลดค่าทุกตัวลงทีละ 1 จนกว่าจะกลายเป็นศูนย์
- เริ่มจากสองค่าแรกของอาร์เรย์ หาค่าที่มากกว่ากัน
- นำค่าที่มากที่สุดไปเปรียบเทียบกับค่าต่อไปในอาร์เรย์
- ทำซ้ำจนครบทุกค่า จะได้ค่าสูงสุดของอาร์เรย์
โปรแกรมตัวอย่าง
#include <iostream>
using namespace std;
int returnMax(int x, int y) {
int c = 0;
while (x || y) {
if (x) x--;
if (y) y--;
c++;
}
return c;
}
int findMaxEle(int A[], int N) {
int maxVal = A[0];
for (int i = N - 1; i; i--)
maxVal = returnMax(maxVal, A[i]);
return maxVal;
}
int main() {
int A[] = {5, 1, 6, 7, 8, 2};
int N = sizeof(A) / sizeof(A[0]);
cout << "The maximum element of the array is " << findMaxEle(A, N);
return 0;
}
ผลลัพธ์
The maximum element of the array is 8