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

จำนวนการดำเนินการเพิ่ม/ลดแบบซัฟฟิกซ์เพื่อสร้างอาร์เรย์ที่กำหนดใน C++

เราได้รับอาร์เรย์เป้าหมาย arr[] ที่มีจำนวนเต็มบวก เป้าหมายคือสร้างอาร์เรย์เป้าหมาย arr[] โดยใช้อาร์เรย์เริ่มต้นที่มีแต่ 0 การดำเนินการที่สามารถนำไปใช้กับอาร์เรย์ว่างที่มีแต่ 0 จะเป็นการดำเนินการเพิ่ม/ลดแบบซัฟฟิกซ์ (suffix increment/decrement operations)

ถ้าเราเลือกดัชนีใดๆ เช่น i ในกรณีของการดำเนินการเพิ่มแบบซัฟฟิกซ์ เราจะบวก 1 ให้กับองค์ประกอบทั้งหมดจากดัชนี i จนถึงดัชนีสุดท้าย

ในกรณีของการดำเนินการลดแบบซัฟฟิกซ์ เราจะลบ 1 จากองค์ประกอบทั้งหมดจากดัชนี i จนถึงดัชนีสุดท้าย

ตัวอย่าง

อินพุต - arr[] = {1, 2, 3}

เอาต์พุต - จำนวนการดำเนินการเพิ่ม/ลดแบบซัฟฟิกซ์เพื่อสร้างอาร์เรย์ที่กำหนดคือ - 3

คำอธิบาย

เริ่มจาก {0, 0, 0} 
เลือกดัชนี 0, ใช้การเพิ่มแบบซัฟฟิกซ์ {1, 1, 1} 
เลือกดัชนี 1, ใช้การเพิ่มแบบซัฟฟิกซ์ {1, 2, 2} 
เลือกดัชนี 2, ใช้การเพิ่มแบบซัฟฟิกซ์ {1, 2, 3} 
รวมการดำเนินการ = 3

อินพุต - arr[] = {1, 4, 5, 3}

เอาต์พุต - จำนวนการดำเนินการเพิ่ม/ลดแบบซัฟฟิกซ์เพื่อสร้างอาร์เรย์ที่กำหนดคือ - 7

คำอธิบาย

เริ่มจาก {0, 0, 0, 0} 
เลือกดัชนี 0, ใช้การเพิ่มแบบซัฟฟิกซ์ {1, 1, 1, 1} 
เลือกดัชนี 1, ใช้การเพิ่มแบบซัฟฟิกซ์ {1, 2, 2, 2} 
เลือกดัชนี 1, ใช้การเพิ่มแบบซัฟฟิกซ์ {1, 3, 3, 3} 
เลือกดัชนี 1, ใช้การเพิ่มแบบซัฟฟิกซ์ {1, 4, 4, 4} 
เลือกดัชนี 2, ใช้การเพิ่มแบบซัฟฟิกซ์ {1, 4, 5, 5} 
เลือกดัชนี 3, ใช้การลดแบบซัฟฟิกซ์ {1, 4, 5, 4} 
เลือกดัชนี 3, ใช้การลดแบบซัฟฟิกซ์ {1, 4, 5, 3} 
รวมการดำเนินการ = 7

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

ถ้าเราหยิบอาร์เรย์เริ่มต้นเป็น B[] เพื่อทำให้องค์ประกอบแรก B[0] เท่ากับ arr[0] เราจะต้องใช้การดำเนินการเพิ่มแบบซัฟฟิกซ์ จำนวน arr[0] ครั้ง หลังจากนี้ B[0]=B[1]...=B[n-1]=arr[0] จะเท่ากันทุกตัว

เพื่อทำให้องค์ประกอบที่สอง B[1] เท่ากับ arr[1] เราจะต้องใช้ |arr[1]-arr[0]| จำนวนการดำเนินการ (ไม่ว่าจะเป็นเพิ่มหรือลด)

ดังนั้น เพื่อทำให้ B[i] เท่ากับ arr[i] เราจะต้องใช้ |arr[i] - arr[i-1]| จำนวนการดำเนินการ

จำนวนการดำเนินการทั้งหมดจะเป็น |arr[0]| + |arr[1]-arr[0]| + … + |arr[n-1]-arr[n-2]|

  • รับอาร์เรย์เป้าหมายเป็น arr[]
  • ฟังก์ชัน incr_decr_op(int arr[], int size) รับอาร์เรย์และความยาว คืนค่าจำนวนการดำเนินการเพิ่ม/ลดแบบซัฟฟิกซ์เพื่อสร้างอาร์เรย์ที่กำหนด
  • ตั้งค่า count เริ่มต้นเป็น 0
  • เดินทางผ่านอาร์เรย์ arr[] โดยใช้ลูป for
  • สำหรับดัชนี 0 บวก arr[i] เข้า count
  • สำหรับดัชนีอื่นๆ บวก abs(arr[i]-arr[i-1]) เข้า count
  • ที่สิ้นสุดของลูป for คืนค่า count เป็นผลลัพธ์

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

#include <bits/stdc++.h> 
using namespace std; 

int incr_decr_op(int arr[], int size){ 
    int count = 0; 
    for (int i = 0; i < size; i++){ 
        if (i > 0){ 
            count += abs(arr[i] - arr[i - 1]); 
        } 
        else{ 
            count = count + abs(arr[i]); 
        } 
    } 
    return count; 
} 

int main(){ 
    int arr[] = {3, 3, 1, 2, 2}; 
    int size = sizeof(arr) / sizeof(arr[0]); 
    cout << "Count of suffix increment/decrement operations to construct a given array are: " << incr_decr_op(arr, size) << endl; 
}

เอาต์พุต

Count of suffix increment/decrement operations to construct a given array are: 6