C++程式:統計1到n範圍內普通數的個數


假設我們有一個數字n。一個數字是一個正整數n,如果在十進位制表示法中所有數字都相同,則稱該數字為普通數。我們必須計算1到n範圍內普通數的個數。

問題類別

程式設計中的各種問題可以透過不同的技術來解決。為了解決一個問題,我們首先必須設計一個演算法,為此我們必須詳細研究特定問題。如果同一個問題反覆出現,則可以使用遞迴方法;或者,我們也可以使用迭代結構。if-else和switch case等控制語句可用於控制程式中邏輯的流程。有效地使用變數和資料結構可以提供更簡單的解決方案以及輕量級、低記憶體佔用程式。我們必須檢視現有的程式設計技術,例如分治法、貪心演算法、動態規劃,並找出它們是否可以。這個問題我們可以透過一些基本的邏輯或暴力方法來解決。請參閱以下內容以更好地理解方法。

因此,如果我們問題的輸入類似於n = 100,則輸出將為18,因為數字為1到9以及11、22、... 99,所以共有18個數字。

步驟

為了解決這個問題,我們將遵循以下步驟 -

s := 0
for initialize p := 1, when p <= n, update (increase s by 1), do:
   p := p / ((p mod 10) * (p mod 10 + 1))
   if p mod 10 is same as 0, then:
      (increase p by 1)
return s

示例

讓我們看看以下實現以獲得更好的理解 -

#include <bits/stdc++.h>
using namespace std;
int solve(int n){
   int s = 0;
   for (int p = 1; p <= n; s++){
      p = p / (p % 10) * (p % 10 + 1);
      if (p % 10 == 0)
         p++;
   }
   return s;
}
int main(){
   int n = 100;
   cout << solve(n) << endl;
}

輸入

100

輸出

18

更新於: 2022年4月8日

609 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告