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