Tách 1 mảng thành 2 mảng chẵn lẻ C/C++ có CODE mẫu

Trong bài viết này, chúng ta sẽ tìm hiểu cách tách mảng một chiều c++  thành hai mảng riêng biệt, một mảng chứa các số chẵn và một mảng chứa các số lẻ. Đây là một bài toán cơ bản nhưng rất quan trọng để hiểu rõ cách xử lý dữ liệu mảng trong C/C++.

Bài 15: số chính phương hay còn gọi là số hình vuông, là số tự nhiên có căn bậc 2 là một số nguyên. Hãy viết chương trình nhập vào các số nguyên đến khi gặp 0 thì dừng và kiểm tra số chính phương c++.

Tính tổng mảng C = A + B, in 3 mảng A, B, C ra màn hình

1. Bài toán tách 1 mảng thành 2 mảng chẵn lẻ C++

Bài 17: 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.

Ví dụ dãy số đầu vào: 1, 4, 5, 6, 7, 11, 21, 42, 23, 6, 9. Sẽ được tách thành 2 dãy: 1, 5, 7, 11, 21, 23, 9 và 4, 6, 42, 6.

2. Mô tả thuật toán tách mảng

Ý tưởng: Tạo mảng mới chứa các phần tử chẵn của mảng đã nhập bằng cách 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. Tách mảng c++

  • Vòng lặp do-while được sử dụng để nhập các số nguyên từ người dùng cho đến khi gặp giá trị 0. Trong vòng lặp:
    • In ra thông báo “Nhap so nguyen n: “.
    • Sử dụng cin để nhập giá trị người dùng vào biến n.
    • Kiểm tra nếu n khác 0:
      • Nếu n chia hết cho 2 (nghĩa là là số chẵn), thêm n vào mảng chẵn a[] và tăng giá trị của c lên 1.
      • Ngược lại, thêm n vào mảng lẻ b[] và tăng giá trị của l lên 1.
    • Lặp lại quá trình cho đến khi n bằng 0.
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.2. In ra các số chẵn trong mảng c++

  • Sử dụng vòng lặp for để duyệt qua các phần tử của mảng chẵn a[] và in ra giá trị của từng phần tử bằng cách sử dụng cout.
  • Sử dụng hàm setw(3) để căn chỉnh độ rộng của giá trị in ra, đảm bảo các số được in cách đều nhau.
  • Tương tự, in ra mảng các số lẻ b[].
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.3. Tính tổng các số lẻ trong mảng c++

  1. Khai báo các biến demc, deml, tongA, tongB để đếm số lượng số chẵn dương, số lẻ âm và tính tổng của từng mảng tương ứng.
  2. Sử dụng vòng lặp for để duyệt qua từng phần tử trong mảng chẵn a[] và mảng lẻ b[]:
    • Nếu phần tử là số chẵn dương (lớn hơn 0), tăng giá trị của demc lên 1 và cộng giá trị của phần tử vào biến tongA.
    • Nếu phần tử là số lẻ âm (nhỏ hơn 0), tăng giá trị của deml lên 1 và cộng giá trị của phần tử vào biến tongB.
// tinh tong so chan, le
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];
   }

2.4 Tính trung bình cộng các số lẻ trong mảng c++

  • tbcC = tongA / demc tính trung bình cộng của các số chẵn dương.
  • tbcL = tongB / deml tính trung bình cộng của các số lẻ âm.
// tinh trung binh cong so chan  
tbcC = tongA / demc;

// tinh trung binh cong so le
tbcL = tongB / deml;

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 mẫu chương trình tách mảng

#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];
   //tach mang, chia mang thanh 2 mang moi
   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);
   // in ra man hinh mang cac so chan
   cout << "Mang cac so chan: ";
   for (i = 0; i < c; i++) cout << setw(3) << a[i];
   cout << endl;
   
   //in ra man hinh mang cac so le
   cout << "Mang cac so le: ";
   for (j = 0; j < l; j++) cout << setw(3) << b[j];
   cout << endl;
   
   // tinh tong so chan, le
   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];
      }
      
    // tinh trung binh cong so chan  
    tbcC = tongA / demc;
    
    // tinh trung binh cong so le
    tbcL = tongB / deml;
    
    // in ra man hinh
   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ẻ. Chúng ta khai báo một mảng ban đầu, sau đó sử dụng vòng lặp để duyệt qua mảng và phân loại các phần tử vào mảng chẵn hoặc lẻ dựa trên tính chẵn lẻ của chúng. Cuối cùng, chúng ta in ra hai mảng. 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é! Cảm ơn các bạn đã tham khảo trên ttnguyen.net

Tải tài liệu thực hành C/C++ có lời giải:

Bài tiếp theo >> Bài 18: 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

sắp xếp số nguyên tố về đầu dãy

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em