首页 > 文章列表 > 用C++编写的由M个数字组成的N位数中能被5整除的数字

用C++编写的由M个数字组成的N位数中能被5整除的数字

整数 除法 C编程
351 2023-09-03

我们给出了一个数字 N 以及一个由 M 位数字组成的数组。我们的工作是找到n个数 由给定的 M 位数字组成的可被 5 整除的数字。

让我们看一些示例来理解问题的输入和输出。

In -< /p>

N = 2
M = 3
arr = {5, 6, 3}

出局 -

2

有 2 N 个数字 35 和 65 可能被 5 整除。让我们看另一个例子。

输入 -

N = 1
M = 7
arr = {2, 3, 4, 5, 6, 7, 8}

输出-

1

给定数组中只有 1 个 1 位数字可以被 5 整除。因此,我们的任务是找到给定的 N 个数字可以被 5 整除的数字的个数。< /p>

数字必须以数字 0 或 5 结尾才能被 5 整除。让我们看看算法

算法

  • 检查对于给定数组中的 0 和 5。 2. 如果同时存在 0 和 5,则有两种方法将数字放入个位。否则,将有一种放置数字的方法。
    • 将计数初始化为 2。
    • 现在,剩余的位置可以有 m - 1、m - 2, m - 3, ... n 种分别填充它们的方法。
    • 编写一个从 0 迭代到 n - 1 的循环。
      • 减少数组。
      • 将其与计数相乘。
  • 如果有单个数字 0 或 5,则有只有一种方法可以将数字放入个位。
    • 将计数初始化为 2。
    • 现在,剩余的位置可以有 m - 1、m - 2 , m - 3, ... n 种分别填充它们的方法。
    • 编写一个从 0 迭代到 n - 1 的循环。
      • 减少数组。
      • 将其与计数相乘。
  • 如果没有数字 0 或 5,则我们可以形成一个能被5整除的数字。此时返回-1。

实现

以下是上述算法的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;
}

输出

如果运行上面的代码,您将得到以下结果。

2