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

โค้ด C++ นับการคัดลอกไม่เกิน k

สมมติว่าเรามีอาร์เรย์ A ขนาด n และตัวเลข k มีกองลูกอม n กอง กองที่ i มี A[i] ลูกอม สามารถดำเนินการบนดัชนี i และ j (i != j) เพิ่ม A[i] ลูกอมเข้าไปใน A[j] (A[i] ไม่ลด) ทำได้ไม่จำกัด แต่ถ้ากองไหนมีลูกอมมากกว่า k อย่างเคร่งครัด ไม่สามารถดำเนินการต่อได้ หาจำนวนครั้งสูงสุดที่ดำเนินการได้

เช่น ถ้าอินพุตคือ A = [1, 2, 3]; k = 5 เอาต์พุตจะเป็น 5 เพราะ i=0 สำหรับ j=1 ทำ 3 ครั้ง j=2 ทำ 2 ครั้ง รวม 5

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

ans := 0
n := ขนาดของ A
เรียงลำดับ A
for i := 1 ถึง n-1:
    ans := ans + (k - A[i]) / A[0]
return ans

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

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

int solve(vector<int> A, int k) {
    int ans = 0;
    int n = A.size();
    sort(A.begin(), A.end());
    for (int i = 1; i < n; i++) {
        ans += (k - A[i]) / A[0];
    }
    return ans;
}

int main() {
    vector<int> A = { 1, 2, 3 };
    int k = 5;
    cout << solve(A, k) << endl;
}

อินพุต

{ 1, 2, 3 }, 5

เอาต์พุต

5