Bài tập  /  Bài đang cần trả lời

Nhập vào từ bàn phím dãy số gồm n số nguyên (n>0) và thực hiện các yêu cầu sau đây

Nhập vào từ bàn phím dãy số gồm n số nguyên (n>0) và thực hiện các yêu cầu sau đây
Yêu cầu: Sử dụng C++
Nhập vào từ bàn phím dãy số gồm n số nguyên (n>0) và thực hiện các yêu cầu sau đây
a. Hiển thị dãy số ra màn hình
b. Nhập vào từ bàn phím số nguyên x. Hãy cho biết x xuất hiện trong dãy số bao nhiêu lần và các vị trí xuất hiện của x
c. Xoá các số có giá trị bằng 0 có trong dãy
d. Sắp xếp các số nguyên tố về đầu dãy, các số không phải là số nguyên tố về cuối dãy
e. Tính trung bình cộng các số chia hết cho 3 có trong dãy
1 Xem trả lời
Hỏi chi tiết
83
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Dưới đây là một chương trình C++ thực hiện các yêu cầu mà bạn đã đưa ra:

```cpp
#include
#include

using namespace std;

// Hàm kiểm tra số nguyên tố
bool isPrime(int num) {
if (num < 2) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}

// Hàm tính trung bình cộng
double calculateAverageDivisibleByThree(const vector& arr) {
int sum = 0;
int count = 0;
for (int num : arr) {
if (num % 3 == 0) {
sum += num;
count++;
}
}
return (count > 0) ? static_cast(sum) / count : 0.0;
}

int main() {
int n;

// Nhập số lượng phần tử
cout << "Nhap vao so luong phan tu n (n > 0): ";
cin >> n;

// Kiểm tra n > 0
if (n <= 0) {
cout << "So luong phan tu phai lon hon 0." << endl;
return 1;
}

vector arr(n);

// Nhập dãy số
cout << "Nhap vao dãy số nguyên: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}

// a. Hiển thị dãy số ra màn hình
cout << "Dãy số đã nhập: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;

// b. Nhập số x và tìm số lần xuất hiện của x
int x;
cout << "Nhap vao so nguyen x: ";
cin >> x;
int countX = 0;
cout << "So " << x << " xuat hien tai cac vi tri: ";
for (int i = 0; i < n; i++) {
if (arr[i] == x) {
cout << i << " ";
countX++;
}
}
cout << endl;
cout << "So " << x << " xuat hien " << countX << " lan." << endl;

// c. Xóa các số có giá trị bằng 0
arr.erase(remove(arr.begin(), arr.end(), 0), arr.end());

// d. Sắp xếp các số nguyên tố về đầu dãy
vector primes, nonPrimes;
for (int num : arr) {
if (isPrime(num)) {
primes.push_back(num);
} else {
nonPrimes.push_back(num);
}
}

arr.clear();
arr.insert(arr.end(), primes.begin(), primes.end());
arr.insert(arr.end(), nonPrimes.begin(), nonPrimes.end());

cout << "Dãy số sau khi xóa số 0 và sắp xếp: ";
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 average = calculateAverageDivisibleByThree(arr);
cout << "Trung binh cong cac so chia het cho 3: " << average << endl;

return 0;
}
```

### Giải thích chương trình:
1. **Nhập vào dãy số**: Chương trình yêu cầu người dùng nhập vào số lượng phần tử `n` lớn hơn 0 và các số nguyên.
2. **Hiển thị dãy số**: In ra dãy số mà người dùng đã nhập.
3. **Tìm và đếm số x**: Người dùng nhập số nguyên `x` và chương trình sẽ tìm và đếm số lần xuất hiện của `x` trong dãy, cùng với các vị trí của nó.
4. **Xóa số 0**: Các số có giá trị bằng 0 sẽ bị xóa khỏi dãy.
5. **Sắp xếp số nguyên tố**: Các số nguyên tố sẽ được đưa về đầu dãy, còn lại sẽ được để ở cuối.
6. **Tính trung bình cộng**: Tính trung bình cộng của các số trong dãy chia hết cho 3.

Chương trình sử dụng các thư viện STL để đơn giản hóa thao tác với dãy số. Hãy biên dịch và chạy chương trình trong môi trường hỗ trợ C++ để kiểm tra kết quả.
1
0
_ღĐức Phátღ_
26/11/2024 15:57:08
+5đ tặng
#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;
}
 

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×