เราได้รับอาร์เรย์ขององค์ประกอบประเภทจำนวนเต็ม และภารกิจคือการสร้างคู่จากอาร์เรย์ที่กำหนดและคำนวณผลรวมขององค์ประกอบในคู่และตรวจสอบว่าผลรวมที่กำหนดนั้นหารด้วย k ลงตัวหรือไม่
ป้อนข้อมูล − int arr[] ={4, 1, 2, 0, 2}, int k =2
ผลผลิต − นับคู่ในอาร์เรย์ที่ผลรวมหารด้วย k ลงตัว − 2
คำอธิบาย − คู่ที่สามารถสร้างได้จากอาร์เรย์ที่กำหนด ได้แก่ (4, 1) =5(หารไม่ได้ด้วย 2), (4, 2) =6(หารด้วย 2), (4, 0) =4(หารด้วย 2), (1, 2) =3(หารด้วย 2), (1, 0) =1(หารไม่ได้ด้วย 2), (2, 0) =2(หารด้วย 2), (2, 2) =4(หารด้วย 2), (0, 2) =2(หารด้วย 2). ดังนั้นคู่ที่มีผลรวมหารด้วย k ลงตัวเป็น 2 คือ (4, 2), (4, 0), (2, 0), (2, 2) และ (0, 2)
ป้อนข้อมูล − int arr[] ={2, 4, 8, 6, 10} , int k =4
ผลผลิต − นับคู่ในอาร์เรย์ที่ผลรวมหารด้วย k ลงตัว − 4
คำอธิบาย − คู่ที่สามารถสร้างได้จากอาร์เรย์ที่กำหนด ได้แก่ (2, 4) =6(หารด้วย 4) ไม่ลงตัว, (2, 8) =10(หารไม่ได้ด้วย 4), (2, 6) =8(หารลงตัว โดย 4), (2, 10) =12(หารด้วย 4), (4, 8) =12(หารด้วย 4), (4, 6) =10(หารไม่ได้ด้วย 4), (4, 10) =14(หารด้วย 4) ไม่ลงตัว, (8, 6) =14(หารด้วย 4) ไม่ลงตัว, (8, 10) =18(หารไม่ได้ด้วย 4), (6, 10) =16(หารด้วย 4) ดังนั้นคู่ที่หารด้วย 4 ลงตัวคือ (2, 10), (2, 6), (4, 8) และ (6, 10)
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
อาจมีหลายวิธีในการแก้ปัญหาที่กำหนด เช่น แนวทางไร้เดียงสาและแนวทางที่มีประสิทธิภาพ มาดูแนวทางไร้เดียงสากันก่อน .
-
ป้อนอาร์เรย์ขององค์ประกอบจำนวนเต็มและตัวแปรจำนวนเต็มเป็น k จากนั้นคำนวณขนาดของอาร์เรย์แล้วส่งข้อมูลไปยังฟังก์ชัน
-
ประกาศการนับตัวแปรชั่วคราวเพื่อเก็บจำนวนคู่โดยมีผลรวมหารด้วย k ลงตัว
-
เริ่มการวนซ้ำ FOR จาก i ถึง 0 จนถึงขนาดของอาร์เรย์
-
ภายในลูป เริ่มวนใหม่ FOR จาก j ถึง i + 1 จนถึงขนาดอาร์เรย์
-
ภายในลูปคำนวณผลรวมเป็น arr[i] + arr[j] และตรวจสอบ IF sum % k ==0 แล้วเพิ่มจำนวนขึ้น 1
-
คืนจำนวน
-
พิมพ์ผล
แนวทางที่มีประสิทธิภาพ
-
ป้อนอาร์เรย์ขององค์ประกอบจำนวนเต็มและคำนวณขนาดของอาร์เรย์แล้วส่งข้อมูลไปยังฟังก์ชัน
-
ประกาศการนับตัวแปรชั่วคราวเพื่อเก็บจำนวนคู่โดยมีผลรวมหารด้วย k ลงตัว
-
สร้างอาร์เรย์ขนาด k เนื่องจากเราต้องตรวจสอบการหารด้วย k
-
เริ่มการวนซ้ำ FOR จาก i ถึง 0 จนถึงขนาดของอาร์เรย์
-
ภายในลูป ตั้งค่า temp เป็น arr[i] % k และเพิ่มอาร์เรย์ล่วงหน้าเป็น ++check[temp]
-
ตั้งเป็น new_arr[0] * (new_arr[0] - 1)/2
-
เริ่มวนซ้ำ FOR as i ถึง 1 จนถึง i <=k/2 AND i !=(k-i)
-
ภายในลูป ตั้งค่า count as count + new_arr[i] * (new_arr[k - i])
-
ตรวจสอบ IF k % 2 =0 แล้วตั้งค่า count เป็น count + (new_arr[k / 2] * (new_arr[k / 2] - 1) / 2)
-
คืนจำนวน
-
พิมพ์ผลลัพธ์
ตัวอย่าง (แนวทางไร้เดียงสา)
#include <iostream> using namespace std; int pair_k(int arr[], int size, int k){ int count = 0; for(int i = 0 ;i <size ; i++){ for(int j = i+1; j<size; j++){ int sum = arr[i] + arr[j]; if(sum % k == 0){ count++; } } } return count; } int main(){ int arr[] = {4, 1, 2, 0, 2}; int size = sizeof(arr) / sizeof(arr[0]); int k = 2; cout<<"Count pairs in array whose sum is divisible by 4 are: "<<pair_k(arr, size, k); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count pairs in array whose sum is divisible by k are: 6
ตัวอย่าง (แนวทางที่มีประสิทธิภาพ)
#include <iostream> using namespace std; int pair_k(int arr[], int size, int k){ int temp = 0; int count = 0; int check[k] = {0}; for (int i = 0; i < size; i++){ temp = arr[i] % k; ++check[temp]; } count = check[0] * (check[0] - 1) / 2; for (int i = 1; i <= k / 2 && i != (k - i); i++){ count = count + check[i] * (check[k - i]); } if (k % 2 == 0){ count = count + (check[k / 2] * (check[k / 2] - 1) / 2); } return count; } int main(){ int arr[] = {4, 1, 2, 0, 2}; int size = sizeof(arr) / sizeof(arr[0]); int k = 2; cout<<"Count pairs in array whose sum is divisible by 4 are: "<<pair_k(arr, size, k); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count pairs in array whose sum is divisible by k are: 6