T4题解

应 zzj 要求。

思路 1:暴力

没什么好说的吧……

分离出每一位,去掉 $9$,再转化成 $9$ 进制即可。

核心代码:

int f(int x)
{
    int a[10], c = 0, r = 0;
    while(x) a[++c] = x % 10, x /= 10;
    for(int i = c;i >= 1;--i)
        if(a[i] != 9) r = r * 9 + a[i];
    return r;
}
......
    while(T--)
    {
        scanf("%d", &n);ans = 0;
        while(1)
        {
            int fn = f(n);
            if(n == fn) break;
            n = fn;++ans;
        }
        printf("%d\n", ans);
    }

这就过了?

思路 2:记搜

用数组记录每个算过的 $x$ 的答案。

核心代码:

int m[100000050];
int f(int x)
{
    int a[10], c = 0, r = 0;
    while(x) a[++c] = x % 10, x /= 10;
    for(int i = c;i >= 1;--i)
        if(a[i] != 9) r = r * 9 + a[i];
    return r;
}
int dfs(int x)
{
    int fx = f(x);if(x == fx) return 0;
    if(m[x]) return m[x];
    return m[x] = dfs(fx) + 1;
}
......
    while(T--)
    {
        scanf("%d", &n);ans = 0;
        printf("%d\n", dfs(n));
    }

就这也能 T4?

posted @ 2022-02-23 16:06  5k_sync_closer  阅读(18)  评论(0编辑  收藏  举报  来源