Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาค่าต่ำสุดในอาร์เรย์โดยไม่ใช้ Relational Operators ใน C++


คำอธิบายปัญหา

ได้รับอาร์เรย์ arr[] ขนาด n ที่ประกอบด้วยจำนวนบวก ต้องการหา ค่าต่ำสุด (minimum) ในอาร์เรย์ โดยห้ามใช้ Relational Operators (เช่น ==, >, <, >=, <=)

ตัวอย่าง

Input: arr[] = {4, 2, 5, 1, 7}
Output: 1

คำอธิบาย: สมาชิกที่เล็กที่สุดคือ 1

แนวทางแก้ปัญหา

แนวคิดคือการ ลดค่าทั้งสองจำนวนลงทีละ 1 จนกว่าจะมีตัวใดตัวหนึ่งเป็น 0 จำนวนรอบที่ลดได้ก่อนจะถึง 0 ก็คือค่าต่ำสุดของสองจำนวนนั้น

เช่นเปรียบเทียบ a และ b:

  • ลด a-- และ b-- พร้อมกัน นับจำนวนรอบ (minVal++)
  • เมื่อ a == 0 หรือ b == 0 หยุด → minVal คือค่าต่ำสุด

นำวิธีนี้มาเปรียบเทียบค่าต่ำสุดปัจจุบันกับสมาชิกถัดไปในอาร์เรย์ทีละตัว

โค้ดตัวอย่าง C++

#include <iostream>
using namespace std;

int findMin(int a, int b) {
    int minVal = 0;
    while (a && b) {  // ทั้งคู่ต้องไม่เป็น 0
        minVal++;
        a--;
        b--;
    }
    return minVal;
}

int findMinimumElement(int arr[], int n) {
    int minVal = arr[0];
    int i = n - 1;
    while (i) {
        minVal = findMin(minVal, arr[i]);
        i--;
    }
    return minVal;
}

int main() {
    int arr[] = {4, 2, 5, 1, 7};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "The minimum element is " << findMinimumElement(arr, n);
    return 0;
}

ผลลัพธ์

The minimum element is 1

หมายเหตุ:

วิธีนี้ใช้ได้กับจำนวนเต็มบวกเท่านั้น และมี Complexity สูง (O(n × min_value)) เหมาะสำหรับการศึกษาแนวคิดมากกว่าการใช้งานจริง