Đếm số phần tử khác nhau trong mảng code C/C++

dem so phan tu khac nhau trong mang 1

Bài tập số 18: Đếm số phần tử khác nhau trong mảng một chiều với ngôn ngữ C/C++. Bài toán giúp bạn hoàn thiện hơn ngôn ngữ lập trình của mình.

1. Giới thiệu bài toán

Đề bài:

Viết hàm đếm số lượng các phần tử khác nhau trong mảng 1 chiều a có n phần tử. Ví dụ: 1 6 2 3 2 4 2 6 5 ==> Có 6 phần tử khác nhau là 1 6 2 3 4 5.

Một bài toán cần vận dụng khá nhiều kiến thức lập trình để giải quyết. Giải được bài toán này, chính tỏ kiến thức lập trình C/C++ trong làm việc với mảng tương đối vững .

2. Giải quyết bài toán

Để giải được bài toán yêu cầu bạn đọc nắm vững kiến thức về vòng lặp for và mảng, bài này cần vận dụng nhiều hơn các bài tập khác.

2.1 Ý tưởng giải quyết bài toán

Ý tưởng giải bài này của mình khá trừu tượng:

Tách các phần tử khác các phần tử còn lại ra mảng thứ 2. Số phần tử của mảng thứ 2 chính là số phần tử khác nhau trong mảng ban đầu.

Có thể bạn chưa biết cách tách, rồi so sánh xem phần tử khác nhau kiểu gì, từ từ mình sẽ giải thích nhé!

Mình sẽ viết hàm trả về số lượng phần tử khác nhau. Nếu thích bạn có thể in luôn các phần tử khác nhau giống với đề bài.

Trong hàm cần khai báo những thứ sau:

  • Một khai báo mảng b (tối đa n phần tử cho đỡ tốn bộ nhớ)
  • Một biến x =1 là số phần tử ban đầu

Mình sẽ gán phần tử đầu tiên của mảng b là phần tử đầu tiên của mảng a để thực hiện so sánh. b[0]=a[0]

Cho vòng lặp for chạy từ vị trí 1 tới cuối mảng a.

Trong vòng lặp for ta tiến hành so sánh a[i] với các phần tử trong mảng b bằng một vòng lặp for và một biến đếm. Nếu biến đếm này =0 tức là không có phần tử giống. Tiến hành thêm phần tử vào mảng b và tăng x.

Đọc thì có vẻ khó hiểu nhưng bạn xem code bên dưới là hiểu ngay nhé!

2.2 Hàm đếm số phần tử khác nhau trong mảng

Dựa trên ý tưởng của mình bên trên, mình code hàm đếm số phần tử khác nhau sau:

int Count(int a[], int n){
	int b[n];
	int x=1;
	b[0]=a[0];
	
	for(int i=1;i<n;i++){
		int dem=0;
		for(int j=0;j<x;j++){
			if(a[i]==b[j])
				dem++;
		}
		if(dem==0){
			b[x]=a[i];
			x++;
		}
	}
	return x;
}

Hàm trả về giá trị là số phần tử khác nhau trong mảng.

Nếu bạn muốn viết hàm đưa ra giá trị và in các phần tử khác nhau thì đơn giản, thêm hàm xuat mảng là được. (Mình sẽ sửa ở phần chương trình hoàn chỉnh cho bạn xem).

2.3 Chương trình đếm số phần tử khác nhau trong mảng

Bạn thêm phần nhập xuất mảng để làm việc với mảng, tùy chỉnh kết quả theo ý thích của bạn nhé!

Code C++ tham khảo:

(lưu ý code C chỉ cần sửa một chút về cú pháp câu lệnh nhập xuất là được)

#include<bits/stdc++.h>
using namespace std;
void nhap(int a[], int &amp;n){
	do{
		cout<<("Nhap n: ");
		cin>>n;
	}
	while(n<2||n>99);
	for(int i=0; i<n; i++){
		cout<<"a["<<i<<"]: ";
		cin>>a[i];
	}
}

void xuat(int a[], int n){
	for(int i=0;i<n;i++){
		cout<<"  "<<a[i];
	}
}

void Count(int a[], int n){
	int b[n];
	int x=1;
	b[0]=a[0];
	
	for(int i=1;i<n;i++){
		int dem=0;
		for(int j=0;j<x;j++){
			if(a[i]==b[j])
				dem++;
		}
		if(dem==0){
			b[x]=a[i];
			x++;
		}
	}
	cout<<"\nCo "<<x<<" phan tu khac nhau la: ";
	xuat(b,x);
}
int main(){
	int a[100];
	int n;
	nhap(a,n);
	Count(a,n);
	return 0;
}

Kết quả của chạy chương trình trên:

dem so phan tu khac nhau trong mang

Bài viết đến đây là hết, rất mong nhận được ý kiến đóng góp, đánh giá bài viết của mình để hoàn thiện hơn.

Xem tiếp bài 19: Tìm phần tử xuất hiện nhiều nhất trong mảng

Xem lại bài 17: Chèn phần tử x vào vị trí k trong mảng

Tải về 67 đề cương bài tập lập trình C/C++

LEAVE A REPLY

Please enter your comment!
Please enter your name here