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

ความต่างสัมบูรณ์สูงสุดของผลรวมค่าและดัชนีในภาษา C

เราได้รับอาร์เรย์ของจำนวนเต็ม งานคือการคำนวณความต่างสัมบูรณ์สูงสุดของผลรวมค่าและดัชนี นั่นคือ สำหรับแต่ละคู่ของดัชนี (i,j) ในอาร์เรย์ เราต้องคำนวณ |Arr[i] - A[j]| + |i-j| และหาผลรวมสูงสุดที่เป็นไปได้ โดย |A| หมายถึงค่าสัมบูรณ์ของ A ถ้าอาร์เรย์มี 4 องค์ประกอบ ดัชนีจะเป็น 0,1,2,3 และคู่ที่ไม่ซ้ำกันจะเป็น ((0,0), (1,1), (2,2), (3,3), (0,1), (0,2), (0,3), (1,2), (1,3), (2,3))

ตัวอย่าง

อินพุต — Arr[] = { 1, 2, 4, 5 }

เอาต์พุต — ความต่างสัมบูรณ์สูงสุดของผลรวมค่าและดัชนี — 7

คำอธิบาย — คู่ดัชนีและ |A[i]-A[j]| + |i-j| ดังนี้

1. (0,0), (1,1), (2,2), (3,3) — |i-j| สำหรับแต่ละคู่คือ 0
2. (0,1) — |1-2| + |0-1| = 1+1 = 2
3. (0,2) — |1-4| + |0-2| = 3+2 = 5
4. (0,3) — |1-5| + |0-3| = 4+3 = 7
5. (1,2) — |2-4| + |1-2| = 2+1 = 3
6. (1,3) — |2-5| + |1-3| = 3+2 = 5
7. (2,3) — |4-5| + |2-3| = 1+1 = 2
ค่าสูงสุดของผลรวมเช่นนี้คือ 7

อินพุต — Arr[] = { 10, 20, 21 }

เอาต์พุต — ความต่างสัมบูรณ์สูงสุดของผลรวมค่าและดัชนี — 13

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

  • รับอาร์เรย์จำนวนเต็มเป็น Arr[]
  • ฟังก์ชัน maxabsDiff(int arr[], int n) ใช้คำนวณความต่างสัมบูรณ์สูงสุดของผลรวมค่าและดัชนี
  • กำหนดตัวแปร result เริ่มต้นเป็น -1
  • ในลูป for วนอาร์เรย์จากจุดเริ่มต้น
  • ใน nested for loop วนองค์ประกอบที่เหลือและคำนวณผลรวมสัมบูรณ์ของค่าองค์ประกอบและดัชนี i,j (abs(arr[i] - arr[j]) + abs(i - j)) เก็บในตัวแปร absDiff
  • ถ้าผลรวมที่คำนวณใหม่มากกว่าค่าก่อนหน้า ให้เก็บใน 'result'
  • คืนค่า result หลังจากวนอาร์เรย์ทั้งหมด

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

#include <stdio.h>
#include <math.h>

// ฟังก์ชันคืนค่าความต่างสัมบูรณ์สูงสุด
int maxabsDiff(int arr[], int n) {
    int result = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            int absDiff = abs(arr[i] - arr[j]) + abs(i - j);
            if (absDiff > result)
                result = absDiff;
        }
    }
    return result;
}

int main() {
    int Arr[] = {1, 2, 4, 1, 3, 4, 2, 5, 6, 5};
    printf("ความต่างสัมบูรณ์สูงสุดของผลรวมค่าและดัชนี: %d", maxabsDiff(Arr, 10));
    return 0;
}

ผลลัพธ์

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

ความต่างสัมบูรณ์สูงสุดของผลรวมค่าและดัชนี: 13