C++ 中 n 位階梯數的個數
階梯數是指一個數字,其中連續數字之間的差為 1。給定一個表示數字位數的數字 n。你需要計算 n 位階梯數的總數。
讓我們來看一個例子。
輸入
2
輸出
17
2 位數的最小數字是 10,最大數字是 99。它們之間有 17 個階梯數。
演算法
- 初始化數字 n。
- 將計數初始化為 0。
- 找到 n 位的最小數字,即 pow(10, n - 1)。
- 找到 n 位的最大數字,即 pow(10, n) - 1。
- 編寫一個迴圈,從最小的 n 位數字迭代到最大的 n 位數字。
- 檢查當前數字是否為階梯數。
- 檢查數字中連續數字對之間的差。
- 如果任何差的結果不是 1,則返回 false,否則返回 true。
- 如果當前數字是階梯數,則遞增計數。
- 返回計數。
實現
以下是上述演算法在 C++ 中的實現
#include <bits/stdc++.h>
using namespace std;
bool isSteppingNumber(int n) {
int previousDigit = -1;
while (n) {
int currentDigit = n % 10;
if (previousDigit != -1 && abs(previousDigit - currentDigit) != 1) {
return false;
}
previousDigit = currentDigit;
n /= 10;
}
return true;
}
int getSteppingNumbersCount(int n) {
int lowestNumber = pow(10, n - 1), highestNumber = pow(10, n) - 1;
int count = 0;
for (int i = lowestNumber; i <= highestNumber; i++) {
if (isSteppingNumber(i)) {
count += 1;
}
}
return count;
}
int main() {
int n = 3;
cout << getSteppingNumbersCount(n) << endl;
return 0;
}輸出
如果執行以上程式碼,則會得到以下結果。
32
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP