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

更新於: 2021-10-26

143 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.