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

โปรแกรม C++ หาขนาดอาร์เรย์ที่ลดแล้วหลังการดำเนินการลบ

สมมติว่าเรามีอาร์เรย์ A ที่มี n องค์ประกอบ พิจารณาว่ามีรหัสผ่าน n จำนวนเต็มบวก เราใช้การดำเนินการต่อไปนี้กับอาร์เรย์ การดำเนินการคือ ลบสององค์ประกอบที่ติดกันซึ่งไม่เท่ากัน แล้ววางผลรวมของพวกมันที่ตำแหน่งนั้น การดำเนินการนี้จะลดขนาดอาร์เรย์ลง 1 เราต้องหาความยาวสั้นที่สุดของอาร์เรย์หลังจากดำเนินการเหล่านี้

เช่น ถ้าค่าที่ป้อนเข้าเป็น A = [2, 1, 3, 1] ผลลัพธ์จะได้ 1 เพราะถ้าเลือก (1, 3) อาร์เรย์จะเป็น [2, 4, 1] แล้วเลือก (2, 4) ทำให้เป็น [6, 1] แล้วเลือกคู่สุดท้ายได้ [7]

ขั้นตอนการแก้ปัญหา

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:

n := ขนาดของ A กำหนดเซต se สำหรับ i := 0 เมื่อ i < n เพิ่ม i ทีละ 1 ทำ:    แทรก A[i] ลงใน se ถ้าขนาดของ se เท่ากับ 1 แล้ว:    คืนค่า n มิฉะนั้น    คืนค่า 1

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

ดูการนำไปใช้จริงด้านล่างเพื่อความเข้าใจที่ดียิ่งขึ้น:

#include <bits/stdc++.h> using namespace std; int solve(vector<int> A) {    int n = A.size();    set<int> a;    for (int i = 0; i < n; i++) {       a.insert(A[i]);    }    if (a.size() == 1)       return n;    else       return 1; } int main() {    vector<int> A = { 2, 1, 3, 1 };    cout << solve(A) << endl; }

ข้อมูลนำเข้า

{ 2, 1, 3, 1 }

ข้อมูลส่งออก

1