บทนำ
โปรแกรมนี้รับอาร์เรย์สองชุด แล้วหารทุกสมาชิกของอาร์เรย์แรกด้วยผลคูณของสมาชิกทั้งหมดในอาร์เรย์ที่สอง
ขั้นตอนการแก้ปัญหา
- คำนวณผลคูณของทุกสมาชิกในอาร์เรย์ที่สอง (ข้าม 0 เพื่อกันหารด้วยศูนย์)
- วนลูปอาร์เรย์แรก หารแต่ละตัวด้วยผลคูณนั้น
- ใช้ 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 ในอาร์เรย์ที่สอง เพื่อกันหารด้วยศูนย์ แต่เปลี่ยนความหมายทางคณิตศาสตร์
สรุป
วิธีง่ายสำหรับโจทย์หารอาร์เรย์ด้วยผลคูณอีกอาร์เรย์หนึ่ง เหมาะสำหรับข้อมูลขนาดเล็ก