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

จำนวนองค์ประกอบสูงสุดที่ข้ามได้ด้วยหน่วย a และ b ใน C++

ได้รับอาร์เรย์ไบนารี arr[] และตัวแปร 2 ตัว a และ b ที่มีค่าเริ่มต้น เพื่อข้ามองค์ประกอบในอาร์เรย์ arr[] มี 2 วิธี −

  • ถ้า arr[i] == 1 ใช้ 1 หน่วยจาก a โดยไม่เปลี่ยนแปลง b ถ้าใช้ 1 หน่วยจาก b แล้ว a เพิ่มขึ้น 1 หน่วย (หมายเหตุ: ค่าของ a ไม่สามารถเพิ่มเกินค่าเดิมได้)
  • ถ้า arr[i] == 0 ใช้ 1 หน่วยจาก a หรือ b ก็ได้

ตัวอย่าง

อินพุต

arr[] = {0, 0, 0, 1, 1}, a = 2, b = 2

เอาต์พุต

5

คำอธิบาย

ข้ามองค์ประกอบที่ 1 ใช้ 1 หน่วยจาก a (a = 1, b = 2)

ข้ามองค์ประกอบที่ 2 ใช้ 1 หน่วยจาก a (a = 0, b = 2)

ข้ามองค์ประกอบที่ 3 ใช้ 1 หน่วยจาก b (a = 0, b = 1)

ข้ามองค์ประกอบที่ 4 ใช้ 1 หน่วยจาก b ซึ่งเพิ่ม a 1 หน่วย (a = 1, b = 0)

ข้ามองค์ประกอบที่ 5 ใช้ 1 หน่วยจาก a (a = 0, b = 0)

ดังนั้น เราข้ามทุกองค์ประกอบได้ และผลลัพธ์คือ 5

อินพุต

arr[] = {1, 1, 1, 0, 1}, a = 1, b = 2

เอาต์พุต

4

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

  • ในฟังก์ชัน MaxElements() เริ่มต้นตัวแปร Oa = 0 และ max = 0 ทั้งคู่เป็น int เพื่อเก็บค่าเดิมของ a และคำตอบสุดท้าย
  • ลูปจาก i = 0 ถึง i < size เพื่อตรวจสอบทุกองค์ประกอบในอาร์เรย์
  • ตรวจสอบก่อนว่า a และ b ทั้งคู่เท่ากับศูนย์หรือไม่ ถ้าใช่ break ออกจากลูป
  • ตรวจสอบ else if (a == 0) ถ้าใช่ ตรวจสอบว่าองค์ประกอบปัจจุบัน = 1 หรือไม่ ถ้าใช่ ลบ 1 จาก b เพื่อข้ามองค์ประกอบนั้น และกำหนด a = min(Oa, a + 1) เพื่อไม่ให้ a เกินค่าเดิม มิฉะนั้น ลบ 1 จาก b โดยไม่กระทบ a
  • ตรวจสอบ else if (b == 0) ถ้าใช่ ลบ 1 จาก a
  • ตรวจสอบ else if (arr[i] == 1 && a < Oa) ถ้าใช่ ลบ 1 จาก b และ a = min(Oa, a + 1)
  • มิฉะนั้น ลบ 1 จาก a และเพิ่ม max
  • นอกลูป คืนค่า max

ตัวอย่างโปรแกรม

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

int MaxElements(int arr[], int a, int b, int size) {
    int Oa = a;
    int max = 0;
    for (int i = 0; i < size; i++) {
        if (a == 0 && b == 0)
            break;
        else if (a == 0) {
            if (arr[i] == 1) {
                b -= 1;
                a = min(Oa, a + 1);
            } else
                b -= 1;
        } else if (b == 0)
            a--;
        else if (arr[i] == 1 && a < Oa) {
            b -= 1;
            a = min(Oa, a + 1);
        } else
            a--;
        max++;
    }
    return max;
}

int main() {
    int arr[] = { 1, 1, 1, 0, 1 };
    int size = sizeof(arr) / sizeof(arr[0]);
    int a = 1;
    int b = 2;
    cout << MaxElements(arr, a, b, size);
    return 0;
}

เอาต์พุต

4