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
广告