cho 2 số nguyên dương n,k và dãy số nguyên a1,a2,a3,...,an.gõ code c++ nhé!!!
a) tìm và in ra tần xuất xuất hiện của các số có trong dãy a1,a2,a3,...,an(theo thứ tự từ lớn đến bé).
b) tìm số có tần xuất lớn thứ k trong dãy a1,a2,a3,...,an nếu ko có thì in ra -1.
| NHẬP TỪ BÀN PHÍM | RA MÀN HÌNH |
|
8 1 1 1 3 3 3 77 2 3 |
1:2 2:1 3:4 77:1 số lớn thứ 1 là:3 |
Quảng cáo
1 câu trả lời 167
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
void findFrequency(vector<int>& a) {
map<int, int> freq;
for (int num : a) {
freq[num]++;
}
vector<pair<int, int>> sorted_freq(freq.begin(), freq.end());
sort(sorted_freq.rbegin(), sorted_freq.rend(), [](pair<int, int>& a, pair<int, int>& b) {
return a.first > b.first;
});
cout << "Tần suất xuất hiện của các số theo thứ tự từ lớn đến bé:" << endl;
for (auto& p : sorted_freq) {
cout << "Số: " << p.first << " - Tần suất: " << p.second << endl;
}
}
void findKthMostFrequent(vector<int>& a, int k) {
map<int, int> freq;
for (int num : a) {
freq[num]++;
}
vector<pair<int, int>> sorted_freq;
for (auto& p : freq) {
sorted_freq.push_back(p);
}
sort(sorted_freq.rbegin(), sorted_freq.rend(), [](pair<int, int>& a, pair<int, int>& b) {
return a.second > b.second;
});
if (k <= sorted_freq.size()) {
cout << "Số có tần suất lớn thứ " << k << ": " << sorted_freq[k - 1].first << endl;
} else {
cout << -1 << endl;
}
}
int main() {
int n, k;
cout << "Nhập số phần tử của dãy: ";
cin >> n;
cout << "Nhập giá trị k: ";
cin >> k;
vector<int> a(n);
cout << "Nhập dãy số: ";
for (int i = 0; i < n; i++) {
cin >> a[i];
}
findFrequency(a);
findKthMostFrequent(a, k);
return 0;
}
Quảng cáo
Bạn muốn hỏi bài tập?
Câu hỏi hot cùng chủ đề
-
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
44988 -
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
34460 -
Đã trả lời bởi chuyên gia
30241 -
Hỏi từ APP VIETJACK27169
-
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
21825
