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] | + | ไอ-เจ | มีดังนี้

<ก่อน>1. (0,0), (1,1), (2,2), (3,3)--------- |i-j| สำหรับแต่ละอันคือ 0.2 (0,1)---------- |1-2| + |0-1|=1+1 =23. (0,2)---------- |1-4| + |0-2|=3+2 =54. (0,3)---------- |1-5| + |0-3|=4+3 =75. (1,2)---------- |2-4| + |1-2|=2+1 =36. (1,3)---------- |2-5| + |1-3|=3+2 =57. (2,3)---------- |4-5| + |2-3|=1+1 =2มูลค่าสูงสุดของผลรวมดังกล่าวคือ 7.

ป้อนข้อมูล − Arr[] ={ 10,20,21 }

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

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

<ก่อน>1. (0,0), (1,1), (2,2)--------- |i-j| สำหรับแต่ละอันคือ 0.2 (0,1)---------- |10-20| + |0-1|=10+1 =113. (0,2)---------- |10-21| + |0-2|=11+2 =134. (1,2)---------- |20-21| + |1-2|=1+1 =2มูลค่าสูงสุดของผลรวมดังกล่าวคือ 13

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราใช้อาร์เรย์จำนวนเต็มที่มีตัวเลขเป็น Arr[]

  • ฟังก์ชัน maxabsDiff( int arr[],int n) ใช้เพื่อคำนวณความแตกต่างสัมบูรณ์สูงสุดของค่าและผลรวมดัชนี..

  • เราเริ่มต้นผลลัพธ์ของตัวแปรด้วย -1

  • ภายใน for วนรอบอาร์เรย์ของจำนวนเต็มตั้งแต่ต้น

  • ในการซ้อนเพื่อวนซ้ำองค์ประกอบที่เหลือและคำนวณผลรวมสัมบูรณ์ของค่าองค์ประกอบและดัชนี i,j (abs(arr[i] - arr[j]) + abs(i - j)) และเก็บไว้ในตัวแปรว่า absDiff

  • หากผลรวมที่คำนวณใหม่นี้มากกว่าจำนวนก่อนหน้า ให้เก็บไว้ใน 'ผลลัพธ์'

  • ส่งกลับผลลัพธ์หลังจากสำรวจทั้งอาร์เรย์

ตัวอย่าง

#include #include // ฟังก์ชันเพื่อคืนค่าส่วนต่างสัมบูรณ์สูงสุด maxabsDiff(int arr[], int n){ int result =0; สำหรับ (int i =0; i  ผล) ผล =absDiff; } } ส่งคืนผลลัพธ์;}int main(){ int Arr[] ={1,2,4,1,3,4,2,5,6,5}; printf("ค่าความแตกต่างสัมบูรณ์สูงสุดของค่าและผลรวมดัชนี:%d", maxabsDiff(Arr,10)); คืนค่า 0;}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

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