1. 程式人生 > 其它 >LuoguB2078 含 k 個 3 的數 題解

LuoguB2078 含 k 個 3 的數 題解

LuoguB2078 含 k 個 3 的數 題解

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\)

這個操作,直至 \(n\) 變為 \(0\) 為止。最後判斷計數器是否等於 \(k\) 即可。

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;
}