Bài toán: Cho mảng một chiều các số nguyên. Hãy viết hàm tìm chữ số xuất hiện ít nhất trong mảng đã cho. Trong trường hợp có hai hay nhiều chữ số có số lần xuất hiện bằng nhau thì in ra chữ số nhỏ nhất.
Ví dụ:
- Input:
1 12 13 23 51
- Output:
Chu so xuat hien it nhat la: 5
Nhận xét:
- Chữ số 1 xuất hiện 4 lần.
- Chữ số 2 xuất hiện 2 lần.
- Chữ số 3 xuất hiện 2 lần.
- Chữ số 5 xuất hiện 1 lần.
Ý tưởng tìm chữ số xuất hiện ít nhất trong mảng
- Đầu tiên các bạn dùng một mảng index[10] để lưu giá trị xuất hiện từng chữ số của mảng.
- Duyệt qua tất cả các phần tử của mảng, với mỗi phần tử ta sẽ lấy ra từng chữ số rồi lưu giá trị xuất hiện của chữ số đó vào mảng index. Lưu ý ta nên lấy
abs(a[i])
để đề phòng trường hợp a[i] âm, còn lấy từng chữ số ra thì ta nên dùng vòng lặp do while vì nếu a[i] = 0 thì ta vẫn đến được sự xuất hiện của số 0. - Sau đó ta thực hiện tìm giá trị min trong mảng index. Giá trị của min phải lớn hơn 0 vì nếu bằng 0 thì chữ số đó sẽ không xuất hiện trong mảng. Dùng một biến x_min để lưu vị trí của giá trị min trong index.
- Vị trí x_min chính là chữ số xuất hiện ít nhất trong mảng.
- Lưu ý ta nên khởi tạo giá trị min thật lớn để chương trình có thể tìm được giá trị nhỏ nhất trong mảng. Nếu các bạn khởi tạo min = 0 thì mặc nhiên chương trình sẽ không thể tìm được giá trị nhỏ nhất ( khác 0 ) trong mảng.
Code tham khảo
#include<iostream> #include<math.h> using namespace std; int index[10] = {0}; void NhapMang(int a[],int n){ for(int i=0;i<n;i++){ cout<<"Nhap a["<<i<<"]: "; cin>>a[i]; } } int Fun(int a[],int n){ for(int i=0;i<n;i++){ int temp = abs(a[i]); do{ int b = temp%10; index[b]++; temp /= 10; }while(temp > 0); } int min = 1000, x_min = 0; for(int i=0;i<9;i++){ if(index[i] > 0){ if(index[i] < min){ min = index[i]; x_min = i; } } } return x_min; } int main(){ int a[100]; int n; cout<<"Nhap vao n: "; cin>>n; NhapMang(a,n); cout<<"Chu so xuat hien it nhat la: "<<Fun(a,n); return 0; }
Sau khi chạy chương trình trên ta nhận được kết quả sau
Nhap vao n: 5 Nhap a[0]: 1 Nhap a[1]: 12 Nhap a[2]: 13 Nhap a[3]: 23 Nhap a[4]: 51 Chu so xuat hien it nhat la: 5
Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận