题解:CF2203B Beautiful Numbers

· · 题解

思路

注意到只有数字之和小于 10 的时候才满足题意。

贪心思考。那你就对每位数字从大到小去给她变成 0,直到剩下数字和小于 10

值得一提的是第一位不能减成 0,所以你可以先把她减一。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[100],cnt;
signed main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int x;
        cin>>x;
        memset(a,0,sizeof a);
        cnt=0;
        int k=x;
        int s=0;
        while(k)
        {
            a[++cnt]=k%10;
            s+=k%10;
            k/=10;
        }
        for(int i=1;i<=cnt;i++)//倒过来
        {
            if(i>(cnt-i+1))swap(a[i],a[cnt-i+1]);
        }
        a[1]--;
        sort(a+1,a+1+cnt);//对每位数字排序
        int j=cnt;//从大到小减
        while(s>=10)
        {
                s-=a[j];
                j--;
        }
        cout<<(cnt-j)<<"\n";
    }
    return 0;
}