Chúng ta đã cho một số N cùng với một mảng M chữ số. Công việc của chúng ta là tìm số chữ số ndigit được tạo thành từ chữ số M đã cho mà chia hết cho 5.
Hãy xem một số ví dụ để hiểu các đầu vào và đầu ra của vấn đề.
Trong -
N = 2 M = 3 arr = {5, 6, 3}
Hết -
2
Có thể có 2 chữ số N là 35 và 65 chia hết cho 5. Hãy xem một ví dụ khác.
Đầu vào -
N = 1 M = 7 arr = {2, 3, 4, 5, 6, 7, 8}
Đầu ra -
1
Dãy đã cho chỉ có 1 số có 1 chữ số chia hết cho 5. Vì vậy, nhiệm vụ của chúng ta là tìm số các số có thể lập từ một số đã cho có N chữ số chia hết cho 5.
Số phải kết thúc bằng chữ số 0 hoặc 5 thì mới chia hết cho 5. Hãy cùng xem thuật toán
Thuật toán
- Kiểm tra 0 và 5 trong mảng đã cho. 2. Nếu có cả 0 và 5 thì có hai cách đặt một chữ số ở hàng đơn vị. Nếu không, sẽ có một cách duy nhất để đặt một chữ số.
- Khởi tạo số đếm thành 2.
- Bây giờ, chỗ còn lại có thể có m - 1, m - 2, m - 3, ... n cách điền tương ứng.
- Viết một vòng lặp lặp từ 0 đến n - 1.
- Giảm kích thước của mảng.
- Nhân nó với số đếm.
- Nếu có một chữ số 0 hoặc 5 thì chỉ có một cách để đặt một chữ số ở hàng đơn vị.
- Khởi tạo số đếm thành 2.
- Bây giờ, chỗ còn lại có thể có m - 1, m - 2, m - 3, ... n cách điền tương ứng.
- Viết một vòng lặp lặp từ 0 đến n - 1.
- Giảm kích thước của mảng.
- Nhân nó với số đếm.
- Nếu không có chữ số 0 hoặc 5 nào lớn hơn chúng ta có thể tạo thành một số có thể chia hết cho 5. Trả về -1 trong trường hợp đó.
Thực hiện
Sau đây là cách thực hiện thuật toán trên trong C ++
#include <bits/stdc++.h> using namespace std; int numbers(int n, int m, int arr[]) { bool isZeroPresent = false, isFivePresent = false; int numbersCount = 0; if (m < n) { return -1; } for (int i = 0; i < m; i++) { if (arr[i] == 0) { isZeroPresent = true; } if (arr[i] == 5) { isFivePresent = true; } } if (isZeroPresent && isFivePresent) { numbersCount = 2; for (int i = 0; i < n - 1; i++) { m--; numbersCount = numbersCount * m; } } else if (isZeroPresent || isFivePresent) { numbersCount = 1; for (int i = 0; i < n - 1; i++) { m--; numbersCount = numbersCount * m; } } else { return -1; } return numbersCount; } int main() { int arr[] = {5, 6, 3}; cout << numbers(2, 3, arr) << endl; return 0; }
Đầu ra
Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.
2