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
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
YÊU CẦU
· Nhập một mảng từ bàn phím
· Cho biết:
o
Từng phần tử của mảng xuất hiện bao nhiêu lần trong
mảng.
Lưu ý: Mỗi phần tử chỉ xuất hiện 1 lần
o
In ra danh sách gồm 2 cột: Giá trị phần tử và số lần
xuất hiện
Cách giải
quyết
Khai báo 1 mảng để lưu trữ những phần tử nào đã in để
về sau khi gặp lại sẽ bỏ qua
Với mỗi phần tử, bổ sung thêm các việc như sau:
Nếu phần tử đó chưa có trong danh sách đã in thì mới
thực hiện các việc sau:
● Đi
đếm số lượng phần tử (như cách làm trước)
● Sau
khi in xong, sẽ thực hiện thêm 2 việc:
○ Đưa
phần tử này vào danh sách đã in
○ Tăng
số lượng phần tử đã in lên
Khai báo sử
dụng thư viện
#include
<conio.h>
#include
<stdio.h>
|
Bổ sung
thêm phần khai báo 1 hàm để kiểm tra 1 phần tử đã có trong 1 danh sách hay
chưa.
bool
CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain);
|
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 ds[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
int
dsdain[10];
int
soluongdain = 0;
|
Nhập vào số
lượng phần tử của mảng
//Hien thong
bao moi nguoi dung nhap
printf("Nhap so luong phan
tu:");
//Nhap vao
tu ban phim
scanf("%d",&n);
|
Nhập mảng từ
bàn phím
for(int i =
0;i<10; i++)
{
printf("Nhap
ds [%d]:",i);
scanf("%d",&ds[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,ds[i]);
}
|
Khai báo một
biến để lưu trữ số lần xuất hiện của từng phần tử
int soluong
= 0;
|
Thực hiện
Tìm kiếm trên danh sách
Lần lượt duyệt qua từng phần tử trong mảng đã cho, với
mỗi phần tử đó sẽ thực hiện:
+ Khởi tạo 1 biến đếm cho bằng 0
+ Chạy từ đầu đến cuối mảng đã cho để kiểm tra:
+ Nếu gặp phần tử nào bằng thì biến đếm tăng lên 1.
+ In ra phần tử + số lần sau đó xuống dòng
Bổ sung thêm điều kiện kiểm tra và xử lý sau đây:
Khai báo 1 mảng để lưu trữ những phần tử nào đã in để về sau khi
gặp lại sẽ bỏ qua
Với mỗi phần tử, bổ sung thêm các việc như sau:
Nếu phần tử đó chưa có trong danh sách đã in thì mới thực hiện
các việc sau:
● Đi
đếm số lượng phần tử (như cách làm trước)
● Sau
khi in xong, sẽ thực hiện thêm 2 việc:
○ Đưa
phần tử này vào danh sách đã in
○ Tăng
số lượng phần tử đã in lên
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(ds[i],dsdain,soluongdain))
{
soluong = 0;
for (int j = 0; j<n; j++)
{
if (ds[i] == ds[j])
{
soluong =
soluong+1;
}
}
//In ra
printf("Gia tri [%d] xuat
hien [%d] lan\n",ds[i], soluong);
//In xong thi bo sung vao danh
sach da in
dsdain[soluongdain] = ds[i];
soluongdain = soluongdain+1;
}
}
|
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;
}
|
Tổng hợp
Code
#include
<stdio.h>
#include
<conio.h>
bool
CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain);
int main()
{
int ds[10];
int n;
//Can 1 mang de luu nhung dong da in ra
int dsdain[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",&ds[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,ds[i]);
}
printf("In danh sach phan tu trong
mang:\n");
int soluong = 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(ds[i],dsdain,soluongdain))
{
soluong = 0;
for (int j = 0; j<n; j++)
{
if (ds[i] == ds[j])
{
soluong =
soluong+1;
}
}
//In ra
printf("Gia tri [%d] xuat
hien [%d] lan\n",ds[i], soluong);
//In xong thi bo sung vao danh
sach da in
dsdain[soluongdain] = ds[i];
soluongdain = soluongdain+1;
}
}
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;
}
|
Giao diện kết
quả
Phân tích kết
quả:
Kết quả in ra đúng yêu cầu.
Mỗi phần tử chỉ xuất hiện 1 lần

No comments: