LuoguB2078 含 k 個 3 的數 題解
阿新 • • 發佈:2021-12-15
LuoguB2078 含 k 個 3 的數 題解
這個操作,直至 \(n\) 變為 \(0\) 為止。最後判斷計數器是否等於 \(k\) 即可。
Content
給定一個數 \(n\),判斷其數位中是否恰好有 \(k\) 個 \(3\)。
資料範圍:\(1<n\leqslant 10^{15}\),\(1<k\leqslant 15\)。
Solution
我們先考慮如何分離出每個數位,其實很簡單。我們都知道,\(n\bmod 10\) 就是 \(n\) 的個位,而 \(n\leftarrow\left\lfloor\dfrac n{10}\right\rfloor\)(向下取整)就相當於把 \(n\) 的個位去掉,因此我們可以不斷地提取出 \(n\bmod 10\),判斷其是否 \(=3\) 再加進計數器中,再進行 \(n\leftarrow\left\lfloor\dfrac n{10}\right\rfloor\)
Code
程式碼中採用了不一樣的一種判斷方法,即碰到數位 \(3\) 就讓 \(k\leftarrow k-1\),最後判斷是否恰好減至 \(k=0\) 即可。
#include <cstdio> using namespace std; long long n; int k; int main() { scanf("%lld%d", &n, &k); while(n) { if(n % 10 == 3) k--; n /= 10; } if(k == 0) printf("YES"); else printf("NO"); return 0; }