
我们给出了一个数字 N 以及一个由 M 位数字组成的数组。我们的工作是找到n个数 由给定的 M 位数字组成的可被 5 整除的数字。
让我们看一些示例来理解问题的输入和输出。
In -
N = 2
M = 3
arr = {5, 6, 3}
出局 -
2
有 2 N 个数字 35 和 65 可能被 5 整除。让我们看另一个例子。
输入 -
立即学习“C++免费学习笔记(深入)”;
N = 1
M = 7
arr = {2, 3, 4, 5, 6, 7, 8}输出-
奥硕企业网站管理系统具有一下特色功能1、双语双模(中英文采用单独模板设计,可制作中英文不同样式的网站)2、在线编辑JS动态菜单支持下拉效果,同时生成中文,英文,静态3个JS菜单3、在线制作并调用FLASH展示动画4、自动生成缩略图,可以自由设置宽高5、图片批量加水印,可以自由设置字体,大小,样式,水印位置(同时支持文字或图片类型水印)6、强大的标签式数据调用,可以调用(新闻,产品,下载,招聘)支持
1
给定数组中只有 1 个 1 位数字可以被 5 整除。因此,我们的任务是找到给定的 N 个数字可以被 5 整除的数字的个数。
数字必须以数字 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++实现
#includeusing 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










