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

หา N จำนวนเต็มที่ไม่ซ้ำกัน ผลรวมเท่าศูนย์ใน C++

ปัญหา

ได้รับจำนวนเต็ม n ต้องคืนอาร์เรย์ที่มี n จำนวนเต็มที่ไม่ซ้ำกัน (Unique) ซึ่งผลรวมเท่ากับ 0 เช่น n = 5 → [-7, -1, 1, 3, 4]

วิธีแก้

  • สร้างอาร์เรย์ A เป็นคำตอบ, x = 0
  • ลูป i = 0 ถึง n-2:
    • A[i] = i + 1
    • x += i + 1
  • A[n-1] = -x
  • คืนค่า A

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

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

void print_vector(vector<int> v) {
    cout << "[";
    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << ", ";
    }
    cout << "]" << endl;
}

class Solution {
public:
    vector<int> sumZero(int n) {
        vector<int> ans(n);
        int x = 0;
        for (int i = 0; i < n - 1; i++) {
            ans[i] = (i + 1);
            x += (i + 1);
        }
        ans[n - 1] = -x;
        return ans;
    }
};

int main() {
    Solution ob;
    print_vector(ob.sumZero(10));
}

อินพุต

10

เอาต์พุต

[1, 2, 3, 4, 5, 6, 7, 8, 9, -45, ]

คำอธิบาย

ใช้จำนวนเต็มบวก 1 ถึง n-1 แล้วตัวสุดท้ายเป็นลบของผลรวม (-(1+2+...+n-1)) รับประกันไม่ซ้ำและผลรวม 0

เช่น n=5: 1,2,3,4,-10 → sum=0