用C++生成由M个数字组成的能被5整除的N位数
给定一个数字N和一个包含M个数字的数组,我们的任务是找到由给定的M个数字组成的、能被5整除的N位数的个数。
让我们看一些例子来理解问题的输入和输出。
输入:
N = 2
M = 3
arr = {5, 6, 3}输出:
2
有2个能被5整除的N位数:35和65。让我们看另一个例子。
输入:
N = 1
M = 7
arr = {2, 3, 4, 5, 6, 7, 8}输出:
1
在给定的数组中,只有一个1位数能被5整除。所以,我们的任务是找到可以由给定数字组成的、能被5整除的N位数的个数。
为了能被5整除,这个数必须以0或5结尾。让我们看看算法
算法
- 1. 检查给定数组中是否存在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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP