ได้รับอาร์เรย์ arr[] ที่มีสมาชิกจำนวนเต็ม และจำนวนเต็ม num เป้าหมายคือหาค่าเฉลี่ยของแต่ละสมาชิก arr[i] กับ num และพิมพ์จำนวนครั้งที่ค่าเฉลี่ยนั้นปรากฏในอาร์เรย์เดิม
ถ้า arr[] = [5, 2, 3] และ num = 2 ค่าเฉลี่ยจะเป็น [3, 2, 2] จำนวนครั้งใน arr[] คือ [1, 1, 1]
ตัวอย่าง
Input
arr[] = { 1, 6, 4, 3, 6, 4 } num=2
Output
1 2 1 0 2 1 Count of occurrences of the average of array elements with a given number are: 5
Explanation
The num is 4 and averages with all other numbers in arr[] is: [ 1, 4, 3, 2, 4, 3 ] occurrences of these in arr[] = [ 1, 2, 1, 0, 2, 1 ]
Input
arr[] = { 4, 8, 24, 16, 20, 40 } num=4
Output
1 0 0 0 0 0 Count of occurrences of the average of array elements with a given number are: 1
Explanation
The num is 4 and averages with all other numbers in arr[] is: [ 4, 6, 14, 10, 12, 22 ] occurrences of these in arr[] = [ 1, 0, 0, 0, 0, 0 ]
วิธีการที่ใช้ในโปรแกรม
วิธีนี้สร้าง map เพื่อเก็บค่าเฉลี่ยและจำนวนครั้งในอาร์เรย์เดิม จากนั้นนำจำนวนเหล่านี้ไปเก็บในอีกอาร์เรย์หนึ่งเพื่อพิมพ์จำนวนครั้งที่ปรากฏ
- รับอาร์เรย์
arr[]ชนิดจำนวนเต็ม - รับ
numเป็นจำนวนเต็ม - ฟังก์ชัน
occurrence_average(int arr[], int size, int num)พิมพ์อาร์เรย์จำนวนครั้งของค่าเฉลี่ยใน arr[] คืนค่าจำนวนครั้งที่ไม่ใช่ศูนย์ - กำหนด count เริ่มต้น = 0
- สร้าง
map<int,int> map_pairเก็บจำนวนครั้งของตัวเลขที่ไม่ซ้ำใน arr[] - สร้างอาร์เรย์
total[]เก็บจำนวนครั้งของแต่ละค่าเฉลี่ย - วนลูป arr[] จาก i=0 ถึง size สำหรับแต่ละสมาชิกเพิ่มค่าสำหรับ key ที่ตรงกัน
map_pair[arr[i]]++ - หลังลูปจบ มีตัวเลขที่ไม่ซ้ำเป็น key และจำนวนครั้งใน arr[] เป็น value
- วนลูปอีกครั้ง คำนวณค่าเฉลี่ยของ num กับแต่ละสมาชิก เก็บใน
temp - ถ้า temp พบใน map_pair
(map_pair.find(temp) != map_pair.end())ใส่เข้าไปในอาร์เรย์ total - พิมพ์อาร์เรย์ total สำหรับจำนวนครั้งของค่าเฉลี่ยที่ปรากฏใน arr[] สำหรับสมาชิกที่ไม่ใช่ศูนย์ เพิ่ม count
- คืนค่า count เป็นผลลัพธ์
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int occurrence_average(int arr[], int size, int num){
int count = 0;
map<int,int> map_pair;
int total[size] = {0};
int val, av;
for (int i = 0; i < size; i++){
if (map_pair[arr[i]] == 0){
map_pair[arr[i]] = 1;
} else {
map_pair[arr[i]]++;
}
}
for (int i = 0; i < size; i++){
int temp = int((arr[i] + num) / 2);
if(map_pair.find(temp) != map_pair.end()){
int set = map_pair[temp];
total[i] = set;
}
}
cout << endl;
for(int i=0;i<size;i++){
cout << total[i] << " ";
if(total[i]>0){
count++;
}
}
return count;
}
int main(){
int arr[] = { 4, 8, 24, 16, 20, 40 };
int size = sizeof(arr)/sizeof(arr[0]);
int num = 4;
cout << endl << "Count of occurrences of the average of array elements with a given number are: " << occurrence_average(arr, size, num);
}
Output
หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้:
Count of occurrences of the average of array elements with a given number are: 1 0 0 0 0 0 1