题目描述:给定n,求1-n中有几个数字满足各位数上的数相同。

统计位数len和最高位h,构造位数和n相同的数hh,hh各位数上都是h,比较n和hh,n小了就--h;
ans=h+9*(len-1).

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t,len,n,h,cnt,k,flag,hh;
    cin>>t;
    while(t--)
    {
        cin>>n;
        len=0,cnt=1;
        k=n;
        while(k)
        {
            ++len;
            k/=10;
            cnt*=10;
        }
        cnt/=10;
        h=n/cnt;//取最高位数
        k=n;
        flag=1;
        hh=0;//判断能不能构成hhhhhh...
        for(int i=1;i<=len;++i)
        {
            hh=hh*10+h;
        }
        if(n<hh) --h;
        //cout<<n<<' '<<hh<<endl;
        cout<<h+9*(len-1)<<endl;
    }
    //getchar();getchar();
    return 0;
}