Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm 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 trong C++


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à num và in mảng số lần xuất hiện của trung bình trong arr[]. 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 trong arr[].
  • 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 đến i<size. Với mỗi phần tử tăng giá trị cho khóa tương ứng bằng map_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 num với mỗi phần tử riêng lẻ và lưu trong temp.
  • Nếu temp được tìm thấy trong map_pair bằng map_pair.find(temp) != map_pair.end(), thì thêm nó vào mảng total.
  • In mảng total cho số lần trung bình xuất hiện trong arr[]. 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