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

ความต่างสูงสุดระหว่างสององค์ประกอบที่องค์ประกอบมากกว่าอยู่หลังองค์ประกอบน้อยกว่าในภาษา C

เราได้รับอาร์เรย์ของจำนวนเต็มขนาด N อาร์เรย์ประกอบด้วยจำนวนเต็มเรียงลำดับสุ่ม งานคือหาความต่างสูงสุดระหว่างสององค์ประกอบ使得องค์ประกอบที่มากกว่าอยู่หลังองค์ประกอบที่น้อยกว่า นั่นคือ Arr[j] - Arr[i] เป็นค่าสูงสุด使得 j > i

ตัวอย่าง

อินพุต

Arr[] = { 2, 1, 3, 8, 3, 19, 21 }

เอาต์พุต — ความต่างสูงสุดระหว่างสององค์ประกอบที่องค์ประกอบมากกว่าอยู่หลังองค์ประกอบน้อยกว่า — 20

คำอธิบาย — ความต่างสูงสุดคือระหว่าง 21 และ 1 และ 21 อยู่หลัง 1 ในอาร์เรย์

อินพุต

Arr[] = { 18, 2, 8, 1, 2, 3, 2, 6 }

เอาต์พุต — ความต่างสูงสุดระหว่างสององค์ประกอบที่องค์ประกอบมากกว่าอยู่หลังองค์ประกอบน้อยกว่า — 6

วิธีการที่ใช้ในโปรแกรม

  • ประกาศอาร์เรย์จำนวนเต็มที่มีคู่ของด้านสี่เหลี่ยมผืนผ้า (Arr[]) — หมายเหตุ: คำอธิบายนี้ดูไม่สอดคล้องกับโจทย์จริง
  • สร้างตัวแปรเก็บขนาดอาร์เรย์ (n)
  • ฟังก์ชัน maxDiff(int arr[], int n) ใช้คำนวณความต่างสูงสุด โดยรับอาร์เรย์และขนาดเป็นอาร์กิวเมนต์
  • ใน maxDiff() ประกาศ MD เก็บความต่างสูงสุดที่พบจนถึงตอนนี้ เริ่มต้นเป็น arr[1] - arr[0]
  • ประกาศ min เก็บค่าน้อยที่สุดที่เยี่ยมชมจนถึงตอนนี้ เริ่มต้นเป็น arr[0]
  • วนลูปจาก i = 1 ถึง n-1
  • ถ้า arr[i] - min > MD ให้อัปเดต MD
  • ถ้า arr[i] < min ให้อัปเดต min
  • คืนค่า MD

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

#include <stdio.h>

int maxDiff(int arr[], int n) {
    // ความต่างสูงสุดที่พบจนถึงตอนนี้
    int MD = arr[1] - arr[0];
    // ค่าน้อยที่สุดที่เยี่ยมชมจนถึงตอนนี้
    int min = arr[0];
    
    for(int i = 1; i < n; i++) {
        if (arr[i] - min > MD)
            MD = arr[i] - min;
        if (arr[i] < min)
            min = arr[i];
    }
    return MD;
}

/* โปรแกรมหลักเพื่อทดสอบฟังก์ชันข้างต้น */
int main() {
    int arr[] = {2, 5, 7, 3, 4, 12};
    int n = 6;
    // เรียกใช้ฟังก์ชัน
    printf("ความต่างสูงสุดคือ: %d", maxDiff(arr, n));
    return 0;
}

ผลลัพธ์

หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ —

ความต่างสูงสุดระหว่างสององค์ประกอบที่องค์ประกอบมากกว่าอยู่หลังองค์ประกอบน้อยกว่า: 10