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

โค้ด C++ นับจำนวนหลังหารเพื่อให้ค่าบวกมากกว่าครึ่งอาร์เรย์

สมมติว่าเรามีอาร์เรย์ A ที่มี n องค์ประกอบ เราต้องหาจำนวนเต็ม d ที่ไม่เป็นศูนย์ บางจำนวน ที่ทำให้หลังจากหารแต่ละจำนวนในอาร์เรย์ด้วย d จำนวนค่าบวกที่ปรากฏในอาร์เรย์จะมากกว่าหรือเท่ากับครึ่งหนึ่งของขนาดอาร์เรย์ ถ้ามีค่า d หลายค่าที่ตรงเงื่อนไข ส่งคืนค่าใดก็ได้

เช่น ถ้าอินพุตคือ A = [10, 0, -7, 2, 6] เอาต์พุตจะเป็น 4 เพราะ n = 5 ต้องการอย่างน้อย 3 องค์ประกอบ ถ้า d = 4 อาร์เรย์หลังหารคือ [2.5, 0, -1.75, 0.5, 1.5] มีค่าบวก 3 ค่า

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

z := 0, f := 0
n := ขนาดของ A
for i := 0 ถึง n-1:
    a := A[i]
    if a > 0: เพิ่ม z ขึ้น 1
    if a < 0: เพิ่ม f ขึ้น 1
if 2 * z >= n: return 1
else if 2 * f >= n: return -1
otherwise: return 0

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

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

int solve(vector<int> A) {
    int z = 0, f = 0;
    int n = A.size();
    for (int i = 0; i < n; i++) {
        int a = A[i];
        if (a > 0) z++;
        if (a < 0) f++;
    }
    if (2 * z >= n) return 1;
    else if (2 * f >= n) return -1;
    else return 0;
}

int main() {
    vector<int> A = { 10, 0, -7, 2, 6 };
    cout << solve(A) << endl;
}

อินพุต

{ 10, 0, -7, 2, 6 }

เอาต์พุต

1