不包含數字 9 的 n 位數的個數


假設你有一個給定的數字 N。現在,你想找到那些不包含數字 9 的 N 位數。這個問題可以用排列組合的數學方法來解決。在這篇文章中,我們將使用 C++ 找到這些數字並計算它們的個數。

假設你必須找到不包含數字 9 的一位數。那麼,這些數字是 (0 – 8)。總共有 8 個這樣的數字。同樣,我們必須找到 N 位數的個數。

在這裡,我們將得到 N 的值,然後我們必須找到所有不包含數字 9 的 N 位數的個數。

輸入輸出場景

給定 N。不包含數字 9 的 N 位數的個數是輸出。

Input: N = 2
Output: 72
Input: N = 3
Output: 648

對於N = 2,不包含數字 9 的可能數字是所有數字,除了90 – 99和那些個位數為 9 的數字。這樣的數字共有 72 個。

假設有 Z 個 N 位數。使用排列組合,形成的 N 位數的總數等於9 * 10N – 1。這是因為每個數字都由(0 – 9)之間的數字構成,除了首位數字不能為 0。

現在,在我們的問題中,我們必須找到那些不包含數字9的數字。這意味著需要排除一個數字,即 9。所以公式變為8 * 9N – 1

使用 pow() 函式

pow() 函式接受兩個引數作為輸入,將第一個引數提升到第二個引數的冪,並返回結果。我們將使用pow()函式來計算9N – 1

#include <iostream>
#include <cmath>
using namespace std;
int possibleNumbers(int N){
   return 8 * pow(9, N - 1);
}
int main() {
   int N = 3;
   cout << "Number of " << N << " digit number which do not contain 9 are " <<
   possibleNumbers(N);
   return 0;
}

輸出

Number of 3 digit number which do not contain 9 are 648

使用迭代和 if 語句

使用pow()函式會涉及各種計算,這可能會降低程式的效率。與其這樣,我們可以嘗試一種更高效的方法,該方法涉及使用 for 迴圈和 if 語句進行指數運算。

示例

#include <iostream>
#include <cmath>
using namespace std;
long long power(int base, int exp) {
   int a = 1;
   for (int j = 1; j <= exp; ++j) {
      a *= base;
   }
   return a;
}
int possibleNumbers(int N) {
   int x = power(9, N - 1);
   return 8 * x;
}
int main() {
   int N = 2;
   cout << "Number of " << N << " digit number which do not contain 9 are " <<
   possibleNumbers(N);
   return 0;
}

輸出

Number of 2 digit number which do not contain 9 are 72

結論

我們討論了查詢不包含數字 9 的 N 位數的不同方法。第一種方法是使用<cmath>庫的pow()函式。第二種方法是使用for迴圈和if語句來計算指數運算。後者效率更高,因為它降低了時間複雜度。

更新於:2024年1月5日

瀏覽量:150

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告