不包含數字 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語句來計算指數運算。後者效率更高,因為它降低了時間複雜度。
廣告