Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวนครั้งที่ค่าเฉลี่ยของอาร์เรย์กับตัวเลขกำหนดปรากฏในอาร์เรย์ด้วย C++

ได้รับอาร์เรย์ 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