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

หารอาร์เรย์หนึ่งด้วยผลคูณของอีกอาร์เรย์ใน C++

บทนำ

โปรแกรมนี้รับอาร์เรย์สองชุด แล้วหารทุกสมาชิกของอาร์เรย์แรกด้วยผลคูณของสมาชิกทั้งหมดในอาร์เรย์ที่สอง

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

  1. คำนวณผลคูณของทุกสมาชิกในอาร์เรย์ที่สอง (ข้าม 0 เพื่อกันหารด้วยศูนย์)
  2. วนลูปอาร์เรย์แรก หารแต่ละตัวด้วยผลคูณนั้น
  3. ใช้ floor() เพื่อปัดทศนิยมทิ้ง (การหารจำนวนเต็ม)

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

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

void divideArrOneWithTwo(int arr_one[], int arr_two[], int n, int m) {
    int arr_two_elements_product = 1;
    for (int i = 0; i < m; i++) {
        if (arr_two[i] != 0) {
            arr_two_elements_product = arr_two_elements_product * arr_two[i];
        }
    }
    for (int i = 0; i < n; i++) {
        cout << floor(arr_one[i] / arr_two_elements_product) << " ";
    }
    cout << endl;
}

int main() {
    int arr_one[] = {32, 22, 4, 55, 6}, arr_two[] = {1, 2, 3};
    divideArrOneWithTwo(arr_one, arr_two, 5, 3);
    return 0;
}

ผลลัพธ์

5 3 0 9 1

คำอธิบาย

  • ผลคูณอาร์เรย์ที่สอง: 1 × 2 × 3 = 6
  • 32 ÷ 6 = 5.33 → floor = 5
  • 22 ÷ 6 = 3.66 → floor = 3
  • 4 ÷ 6 = 0.66 → floor = 0
  • 55 ÷ 6 = 9.16 → floor = 9
  • 6 ÷ 6 = 1 → floor = 1

ข้อควรพิจารณา

  • ผลคูณอาจล้น (overflow) ถ้าอาร์เรย์ใหญ่หรือค่ามาก → ควรใช้ long long หรือ BigInteger
  • ข้าม 0 ในอาร์เรย์ที่สอง เพื่อกันหารด้วยศูนย์ แต่เปลี่ยนความหมายทางคณิตศาสตร์

สรุป

วิธีง่ายสำหรับโจทย์หารอาร์เรย์ด้วยผลคูณอีกอาร์เรย์หนึ่ง เหมาะสำหรับข้อมูลขนาดเล็ก