Bài tập thực hành đếm số lần xuất hiện của từng phần tử trong mảng. Mỗi phần tử chỉ xuất hiện một lần. Có sử dụng hàm
Bài tập thực hành đếm số lần xuất hiện của từng phần tử trong mảng.
Mỗi phần tử chỉ xuất hiện một lần. Có sử dụng hàm
Bài tập thực hành đếm số lần xuất hiện của từng phần tử trong mảng
Đầu vào:
–Cho một danh sách gồm n phần tử
–Hãy in ra: Từng phần tử trong danh sách này xuất hiện bao nhiêu
lần.
–Ví dụ:
•A [1,2,3,4,5,4,3,5,4,6,7,8,6]
•Thì KQ [1,2,3,4,5,6,7,8]
•Với số lượng lần xuất hiện tương ứng [1,1,2,3,2,2,1,1]
Chú ý: Xây dựng các hàm bổ trợ để thực hiện các việc sau:
1. Hàm kiểm tra 1 phần tử có tồn tại trong 1 danh sách hay không?
2. Hàm In danh sách
...
Hướng dẫn thực hiện
•Khai báo mảng A gồm các phần tử nhập vào.
•Khai báo mảng B gồm các phần tử kết quả
•Khai báo mảng C gồm các phần tử số lượng
•Biến Số lượng = 0;
•Lần lượt duyệt qua A
•Nếu A[i] chưa có
trong B thì thực hiện:
•Số lần = Đếm số lần
A[i] trong A
•B [Số lượng] = A[i];
•C [Số lượng] = Số lần;
•Số lượng = Số lượng
+1
• In danh sách B và danh sách C
•Lưu ý: Cần 2 hàm:
•Hàm 1: Kiểm tra xem 1 phần tử có trong danh sách hay chưa?
•Hàm 2: Đếm số lần xuất hiện của 1 phần tử trong mảng
Code lab tại đây:
https://codelabs-preview.appspot.com/?file_id=1xOIxR_rkdEoCWTfixHW8OChOXyP-9A4gQ9zHYcixk1Y#5
Code lab tại đây:
https://codelabs-preview.appspot.com/?file_id=1xOIxR_rkdEoCWTfixHW8OChOXyP-9A4gQ9zHYcixk1Y#5
Khai báo sử dụng thư viện
#include <stdio.h>
#include <conio.h>
|
Bổ sung thêm phần khai báo 2 hàm
bool CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain);
int SoLanXuatHien(int bien, int ds[],int soluongdanhsach);
|
Khai báo một mảng các phần tử kiểu int với số lượng là 10 phần tử.
int A[10];
int n;
|
Khai báo thêm một mảng và 1 biến để lưu số lượng phần tử đã in
//Can 1 mang de luu nhung dong da in ra
int B[10];
int C[10];
int soluongdain = 0;
|
Nhập vào số lượng phần tử của mảng
printf("Nhap so luong phan tu:");
//Nhap vao tu ban phim
scanf("%d",&n);
//In n ra
printf("n=%d\n",n);
//Nhap cac phan tu trong mang
for (int i = 0; i<n; i++)
{
//In ra loi huong dan nhap phan tu thu may
printf("Nhap phan tu thu [%d]:",i+1);
scanf("%d",&A[i]);
}
|
Hiện mảng đã nhập
printf("Danh sach da nhap la:");
for (int i = n-1;i>=0;i--)
{
printf("ds[%d]=%d\n",i,A[i]);
}
|
Thực hiện Tìm kiếm trên danh sách
- •Lần lượt duyệt qua A
- •Nếu A[i] chưa có trong B thì thực hiện:
- •Số lần = Đếm số lần A[i] trong A
- •B [Số lượng] = A[i];
- •C [Số lượng] = Số lần;
- •Số lượng = Số lượng +1
- • In danh sách B và danh sách C
Code như sau:
for (int i = 0;i<n;i++)
{
//Neu ds[i] chua nam trong danh sach da in thi lam
//if !CoTrongDanhSach(ds[i], dsdain) thi
if (!CoTrongDanhSach(A[i],B,soluongdain))
{
solanxuathien = 0;
solanxuathien = SoLanXuatHien(A[i],A,n);
//In xong thi bo sung vao danh sach da in
B[soluongdain] = A[i];
C[soluongdain] = solanxuathien;
soluongdain = soluongdain+1;
}
}
|
Hiện 2 danh sách kết quả
- 1 phần tử trong danh sách B, xuất hiện mấy lần
//In ket qua
printf("In danh sach phan tu trong mang:\n");
for (int i = 0;i<soluongdain;i++)
{
printf("Phan tu[%d] xuat hien %d lan\n",B[i],C[i]);
}
getch();
|
Viết code để thực hiện kiểm tra 1 phần tử đã có trong 1 danh sách hay chưa.
bool CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain)
{
//Duyet tu dau den cuoi danh sach.
//Neu co thi tra ra ngoai la da co
for (int i = 0; i<soluongdain; i++)
{
if (socankiemtra==dsdain[i])
{
return true;
}
}
//Den het roi ma khong co thi tra ra la khong co
return false;
}
|
Viết code xây dựng hàm đếm số lần xuất hiện của một phần tử trong mảng
int SoLanXuatHien(int bien, int ds[],int soluongdanhsach)
{
int solan = 0;
for (int j = 0; j<soluongdanhsach; j++)
{
if (bien == ds[j])
{
solan = solan+1;
}
}
return solan;
}
|
Tổng hợp Code
#include <stdio.h>
#include <conio.h>
bool CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain);
int SoLanXuatHien(int bien, int ds[],int soluongdanhsach);
int main()
{
int A[10];
int n;
//Can 1 mang de luu nhung dong da in ra
int B[10];
int C[10];
int soluongdain = 0;
//Hien thong bao moi nguoi dung nhap
printf("Nhap so luong phan tu:");
//Nhap vao tu ban phim
scanf("%d",&n);
//In n ra
printf("n=%d\n",n);
//Nhap cac phan tu trong mang
for (int i = 0; i<n; i++)
{
//In ra loi huong dan nhap phan tu thu may
printf("Nhap phan tu thu [%d]:",i+1);
scanf("%d",&A[i]);
}
//In ra danh sach
printf("Danh sach da nhap la:");
for (int i = n-1;i>=0;i--)
{
printf("ds[%d]=%d\n",i,A[i]);
}
int solanxuathien = 0;
for (int i = 0;i<n;i++)
{
//Neu ds[i] chua nam trong danh sach da in thi lam
//if !CoTrongDanhSach(ds[i], dsdain) thi
if (!CoTrongDanhSach(A[i],B,soluongdain))
{
solanxuathien = 0;
solanxuathien = SoLanXuatHien(A[i],A,n);
//In xong thi bo sung vao danh sach da in
B[soluongdain] = ds[i];
C[soluongdain] = solanxuathien;
soluongdain = soluongdain+1;
}
}
//In ket qua
printf("In danh sach phan tu trong mang:\n");
for (int i = 0;i<soluongdain;i++)
{
printf("Phan tu[%d] xuat hien %d lan\n",B[i],C[i]);
}
getch();
}
bool CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain)
{
//Duyet tu dau den cuoi danh sach.
//Neu co thi tra ra ngoai la da co
for (int i = 0; i<soluongdain; i++)
{
if (socankiemtra==dsdain[i])
{
return true;
}
}
//Den het roi ma khong co thi tra ra la khong co
return false;
}
int SoLanXuatHien(int bien, int ds[],int soluongdanhsach)
{
int solan = 0;
for (int j = 0; j<soluongdanhsach; j++)
{
if (bien == ds[j])
{
solan = solan+1;
}
}
return solan;
}
|
Giao diện kết quả
Tham khảo hướng dẫn thực hành cách khác tại đây:
No comments: