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

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

เราได้รับอาร์เรย์ของจำนวนเต็มขนาด N อาร์เรย์ประกอบด้วยจำนวนเต็มเรียงลำดับสุ่ม งานคือหาความต่างสูงสุดระหว่างดัชนีแรกและสุดท้ายขององค์ประกอบในอาร์เรย์ เราต้องหาตัวเลขที่ปรากฏสองครั้งในอาร์เรย์และความต่างของดัชนีเป็นค่าสูงสุด หากมีคู่มากกว่านี้ เราจะเก็บความต่างสูงสุดระหว่างดัชนี

ตัวอย่าง

อินพุต

Arr[] = { 2, 1, 3, 1, 3, 2, 5, 5 }

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

คำอธิบาย — คู่ขององค์ประกอบและความต่างของดัชนี ดังนี้ —

(2,2) Arr[0] และ Arr[5] 5-0=5 ความต่างสูงสุดจนถึงตอนนี้คือ 5
(1,1) Arr[1] และ Arr[3] 3-1=2 ความต่างสูงสุดจนถึงตอนนี้คือ 5
(3,3) Arr[2] และ Arr[4] 4-2=2 ความต่างสูงสุดจนถึงตอนนี้คือ 5
(5,5) Arr[6] และ Arr[7] 7-6=1 ความต่างสูงสุดจนถึงตอนนี้คือ 5

อินพุต

Arr[] = { 2, 2, 3, 4, 8, 3, 4, 4, 8, 7 }

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

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

  • ประกาศอาร์เรย์จำนวนเต็มที่มีตัวเลขซ้ำเรียงลำดับสุ่ม (Arr[])
  • สร้างตัวแปรเก็บขนาดอาร์เรย์ (N)
  • ฟังก์ชัน maxDifference(int Arr[], int n) ใช้คำนวณความต่างสูงสุด (maxD) ระหว่างดัชนีแรกและสุดท้ายขององค์ประกอบในอาร์เรย์
  • ใน maxDifference() ประกาศ maxD ใช้เก็บความต่างดัชนีสูงสุดที่พบจนถึงตอนนี้
  • เริ่มจากองค์ประกอบแรก (ดัชนี i=0) วนอาร์เรย์ด้วยลูป for
  • ใน nested for loop วนอาร์เรย์ที่เหลือ (j=i+1) จนถึงดัชนีสุดท้าย
  • หากพบองค์ประกอบเดียวกับ Arr[i] ให้คำนวณความต่างของดัชนี i,j และถ้ามากกว่าค่า maxD ก่อนหน้า ให้อัปเดต maxD
  • ทำซ้ำจนจบลูปทั้งสอง
  • คืนค่าผลลัพธ์ที่เก็บใน maxD

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

#include <stdio.h>

int maxDifference(int arr[], int n) {
    int maxD = 0;
    for(int i = 0; i < n - 1; i++) {
        for(int j = i + 1; j < n; j++) {
            if(arr[i] == arr[j] && (j - i) > maxD)
                maxD = j - i;
        }
    }
    return maxD;
}

int main() {
    int Arr[] = {1, 4, 1, 3, 3, 5, 4, 5, 2};
    int N = sizeof(Arr) / sizeof(Arr[0]);
    printf("ความต่างสูงสุดระหว่างดัชนีแรกและสุดท้ายขององค์ประกอบในอาร์เรย์: %d", maxDifference(Arr, N));
    return 0;
}

ผลลัพธ์

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

ความต่างสูงสุดระหว่างดัชนีแรกและสุดท้ายขององค์ประกอบในอาร์เรย์: 5