Cho một mảng arr[] chứa các phần tử nguyên và một số nguyên num. Mục tiêu là tìm trung bình của mỗi phần tử arr[i] và num và in ra số lần trung bình đó xuất hiện trong mảng gốc.
Nếu mảng arr[] là [5, 2, 3] và num là 2. Các trung bình sẽ là [3, 2, 2] số lần xuất hiện trong arr[] là [1,1,1].
Ví dụ
Đầu vào
arr[] = { 1, 6, 4, 3, 6, 4 } num=2
Đầu ra
1 2 1 0 2 1 Số lần xuất hiện của trung bình các phần tử mảng với số cho trước là: 5
Giải thích
Số num là 4 và trung bình với tất cả các số khác trong arr[] là: [1, 4, 3, 2, 4, 3] số lần xuất hiện của chúng trong arr[] = [1, 2, 1, 0, 2, 1]
Đầu vào
arr[] = { 4, 8, 24, 16, 20, 40 } num=4
Đầu ra
1 0 0 0 0 0 Số lần xuất hiện của trung bình các phần tử mảng với số cho trước là: 1
Giải thích
Số num là 4 và trung bình với tất cả các số khác trong arr[] là: [4, 6, 14, 10, 12, 22] số lần xuất hiện của chúng trong arr[] = [1, 0, 0, 0, 0, 0]
Phương pháp sử dụng
Trong phương pháp này, chúng ta sẽ tạo một map để lưu trữ các trung bình và số lần xuất hiện của chúng trong mảng gốc. Chúng ta sẽ cộng các số lần này vào một mảng riêng để in số lần xuất hiện.
- Nhận
arr[]kiểu nguyên. - Nhận
numđầu vào kiểu nguyên. - Hàm
occurrence_average(int arr[], int size, int num)nhận mảng đầu vào vànumvà in mảng số lần xuất hiện của trung bình trongarr[]. Nó trả về số lượng phần tử khác 0. - Khởi tạo biến đếm ban đầu = 0.
- Lấy
map<int,int> map_pairđể lưu số lần xuất hiện của các số duy nhất trongarr[]. - Lấy mảng
total[]để lưu số lần của mỗi trung bình. - Duyệt mảng
arr[]bằng vòng lặp for từ chỉ sối=0đếni<size. Với mỗi phần tử tăng giá trị cho khóa tương ứng bằngmap_pair[arr[i]]++. - Cuối vòng lặp, ta có các số duy nhất làm khóa và số lần của chúng trong
arr[]làm giá trị. - Duyệt mảng lại bằng vòng lặp for để tính trung bình của
numvới mỗi phần tử riêng lẻ và lưu trongtemp. - Nếu
tempđược tìm thấy trongmap_pairbằngmap_pair.find(temp) != map_pair.end(), thì thêm nó vào mảngtotal. - In mảng
totalcho số lần trung bình xuất hiện trongarr[]. Với mỗi phần tử khác 0, tăng biến đếm. - Trả về biến đếm làm kết quả.
Ví dụ mã
#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 = (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 << "Số lần xuất hiện của trung bình các phần tử mảng với số cho trước là: " << occurrence_average(arr, size, num);
return 0;
}
Đầu ra
Nếu chạy mã trên, sẽ tạo ra đầu ra sau:
1 0 0 0 0 0 Số lần xuất hiện của trung bình các phần tử mảng với số cho trước là: 1