Computer >> Máy Tính >  >> Lập trình >> C ++

N chữ số chia hết cho 5 được hình thành từ chữ số M trong C ++

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