用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