#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
// Hàm kiểm tra số nguyên tố
bool isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
// Hàm tính trung bình cộng các số chia hết cho 3
double averageDivisibleByThree(const vector<int>& arr) {
int sum = 0, count = 0;
for (int num : arr) {
if (num % 3 == 0) {
sum += num;
count++;
}
}
return count > 0 ? static_cast<double>(sum) / count : 0;
}
int main() {
int n;
cout << "Nhập số lượng phần tử của dãy số (n > 0): ";
cin >> n;
if (n <= 0) {
cout << "n phải lớn hơn 0!" << endl;
return 0;
}
vector<int> arr(n);
cout << "Nhập các phần tử của dãy số: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// a. Hiển thị dãy số
cout << "Dãy số vừa nhập: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
// b. Tìm số lần xuất hiện và vị trí của x
int x;
cout << "Nhập số nguyên x cần tìm: ";
cin >> x;
int count = 0;
cout << "Số " << x << " xuất hiện tại các vị trí: ";
for (int i = 0; i < arr.size(); i++) {
if (arr[i] == x) {
cout << i << " ";
count++;
}
}
cout << "\nSố " << x << " xuất hiện " << count << " lần.\n";
// c. Xoá các số có giá trị bằng 0
arr.erase(remove(arr.begin(), arr.end(), 0), arr.end());
cout << "Dãy số sau khi xoá các số 0: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
// d. Sắp xếp các số nguyên tố về đầu dãy
stable_partition(arr.begin(), arr.end(), isPrime);
cout << "Dãy số sau khi sắp xếp (số nguyên tố về đầu): ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
// e. Tính trung bình cộng các số chia hết cho 3
double avg = averageDivisibleByThree(arr);
cout << "Trung bình cộng các số chia hết cho 3: " << avg << endl;
return 0;
}