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

หาค่าสูงสุดในอาร์เรย์โดยไม่ใช้ตัวดำเนินการเชิงสัมพันธ์ใน C++

โจทย์

ได้รับอาร์เรย์ arr[] ขนาด n ที่ประกอบด้วยค่าบวก ทางเราต้อง หาค่าสูงสุดในอาร์เรย์โดยไม่ใช้ตัวดำเนินการเชิงสัมพันธ์ (Relational Operators)

ตัวอย่าง

Input: arr[] = {5, 1, 6, 7, 8, 2}

Output: 8

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

เนื่องจากต้องเปรียบเทียบค่าโดยไม่ใช้ตัวดำเนินการตรรกะ เราจะใช้วิธี การลบซ้ำ (Repeated Subtraction) ตัวเลขที่คงอยู่นานที่สุด (ต้องลบหลายครั้งจนถึงศูนย์) จะเป็นตัวเลขที่มากกว่า

ขั้นตอน:

  1. ลดค่าทุกตัวลงทีละ 1 จนกว่าจะกลายเป็นศูนย์
  2. เริ่มจากสองค่าแรกของอาร์เรย์ หาค่าที่มากกว่ากัน
  3. นำค่าที่มากที่สุดไปเปรียบเทียบกับค่าต่อไปในอาร์เรย์
  4. ทำซ้ำจนครบทุกค่า จะได้ค่าสูงสุดของอาร์เรย์

โปรแกรมตัวอย่าง

#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