Cùng với list và vector, mảng có vai trò quan trọng khi xử lý dữ liệu lớn cùng loại. Sau đây hãy cùng TTnguyen giải quyết bài toán tách 1 mảng thành 2 mảng trong ngôn ngữ lập trình C/C++ nhé!
Xem thêm:
1. Bài toán tách 1 mảng thành 2 mảng chẵn lẻ C++
Đề bài: Hãy viết chương trình nhập vào một dãy số đến khi gặp số 0 thì dừng, sau đó tách các số chẵn và số lẻ ra 2 mảng khác nhau. Tính trung bình cộng các số chẵn dương và trung bình cộng các số lẻ âm.
2. Mô tả thuật toán tách mảng chẵn lẻ
Ý tưởng: Khai báo 2 mảng a[c], b[l] chứa lần lượt các phần tử chẵn và lẻ sau khi tách dãy số nguyên nhập vào từ bàn phím. Tiến hành duyệt mảng a để tính tổng các phần tử chẵn, duyệt mảng b để tính tổng các phần tử lẻ.
2.1. Hàm nhập một dãy số đến khi gặp số 0 thì dừng
do { cout << "Nhap so nguyen n: "; cin >> n; } while (n != 0);
2.2. Thuật toán kiểm tra số chẵn lẻ
Sử dụng dấu % để chia lấy dư. Nếu n chia 2 dư 0 thì n là số chẵn, ngược lại n là số lẻ.
if (n % 2 == 0) { cout << n << " la so chan"; } else { cout << n << " la so le"; }
2.3. Hàm tách số chẵn lẻ.
Trong khi nhập vào từ bàn phím dãy số nguyên n thì bạn tiến hành tách số chẵn lẻ. Nếu như n chia hết cho 2 thì gán n vào mảng chẵn ngược lại, nếu n không chia hết cho 2 thì gán n vào mảng lẻ.
do { cout << "Nhap so nguyen n: "; cin >> n; if (n != 0) { if (n % 2 == 0) { a[c] = n; c++; } else { b[l] = n; l++; } } } while (n != 0);
2.4. In ra màn hình dãy số chẵn lẻ C++
cout << "Mang cac so chan: "; for (i = 0; i < c; i++) cout << setw(3) << a[i]; cout << endl; cout << "Mang cac so le: "; for (j = 0; j < l; j++) cout << setw(3) << b[j]; cout << endl;
2.5. Tính tổng các số chẵn lẻ
for (i = 0; i < c; i++) if (a[i] > 0) { demc++; tongA = tongA + a[i]; } for (j = 0; j < l; j++) if (b[j] < 0) { deml++; tongB = tongB + b[j]; }
2.6. Gộp 2 mảng thành 1 mảng C++
for (int i = 0; i < c + l; i++) { if (i < c) c[i] = a[i]; else c[i] = b[i - c]; } /* for(i=m+1;i<=n;i++){ b[i]=c[i-m]; } */
3. Code tham khảo chương trình tách các số chẵn lẻ ra 2 mảng khác nhau
#include<bits/stdc++.h> using namespace std; int main() { int n, i, j, c = 0, l = 0; double tbcC, tbcL; int a[250], b[250]; do { cout << "Nhap so nguyen n: "; cin >> n; if (n != 0) { if (n % 2 == 0) { a[c] = n; c++; } else { b[l] = n; l++; } } } while (n != 0); cout << "Mang cac so chan: "; for (i = 0; i < c; i++) cout << setw(3) << a[i]; cout << endl; cout << "Mang cac so le: "; for (j = 0; j < l; j++) cout << setw(3) << b[j]; cout << endl; int demc = 0, deml = 0, tongA = 0, tongB = 0; for (i = 0; i < c; i++) if (a[i] > 0) { demc++; tongA = tongA + a[i]; } for (j = 0; j < l; j++) if (b[j] < 0) { deml++; tongB = tongB + b[j]; } tbcC = tongA / demc; tbcL = tongB / deml; cout << "Trung binh cong cac so chan duong la: " << setprecision(2) << tbcC << endl; cout << "Trung binh cong cac so le am la: " << setprecision(2) << tbcL; }
Ok, vậy mình đã hoàn thành bài toán tách 1 mảng thàng 2 mảng chẵn lẻ. Nếu có bất kỳ thắc mắc hoặc sai sót gì thì đừng ngần lại liên hệ với mình nhé! Chúc các bạn học tập tốt