1 条题解

  • 1
    @ 2022-08-27 22:42:52

    首先要明确思路,如果两个数字的数字和等于他们和的数字和,那么就 每一位都不能出现进位的情况。那么我们开始枚举每一位的不进位的情况,最后乘一下,取模即可。

    因为第 \(1\) 位不可以是 \(0\) 或者 \(9\),所以在这不考虑这种情况,但第 \(2 \sim k-1\) 位要考虑。

    \(A\) 数第 \(1\) 位可以取的数 \(B\) 数第 \(1\) 位可以取的数
    \(1\) \(1 \sim 8\)
    \(2\) \(1 \sim 7\)
    \(3\) \(1 \sim 6\)
    \(4\) \(1 \sim 5\)
    \(5\) \(1 \sim 4\)
    \(6\) \(1 \sim 3\)
    \(7\) \(1 \sim 2\)
    \(8\) \(1\)

    一共 \((8+1)×8÷2=36\) 种选择。

    同理 ,可以推出 \(2 \sim k-1\) 位的情况。

    \(A\) 数第 \(2 \sim k-1\) 位可以取的数 \(B\) 数第 \(2 \sim k-1\) 位可以取的数
    \(0\) \(0 \sim 9\)
    \(1\) \(0 \sim 8\)
    \(2\) \(0 \sim 7\)
    \(3\) \(0 \sim 6\)
    \(4\) \(0 \sim 5\)
    \(5\) \(0 \sim 4\)
    \(6\) \(0 \sim 3\)
    \(7\) \(0 \sim 2\)
    \(8\) \(0 \sim 1\)
    \(9\) \(0\)

    共 \((10+1)×10÷2=55\) 种。

    那么,\(ans=36+(k-1)×55%10007\)。

    #include<bits/stdc++.h>
    using namespace std;
    int t,k,ans=0;
    int main()
    {
        freopen("sum.in","r",stdin);
        freopen("sum.out","w",stdout);
        scanf("%d",&t);
        while(t--)
        {
            ans=36; 
            scanf("%d",&k);
            for(int i=1; i<k; i++)
                ans=ans*55%10007;
            printf("%d\n",ans);
        }
        return 0;
    }
    
  • 1

信息

ID
1589
难度
4
分类
数学 点击显示
标签
递交数
3
已通过
1
通过率
33%
上传者