A. Happy Birthday, Polycarp!

Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

题目链接:https://codeforces.com/contest/1277/problem/A

题目描述:

题目

思路:

一位数有九个美丽数字(1,2,3,4,5,6,7,8,9),两位数九个美丽数字(11,22,33,44,55,66,77,88,99),之后都一样,所以,输入一个数先判断它有几位数(假设有n位),那么毫无疑问至少有(n-1)*9个美丽数字,至于1en到1e(n+1)的范围至多只需判断九次就可以得到所有的美丽数字的个数。

代码:

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<queue>
#include<map>
using namespace std;
int t,n;
int fun(int x,int y){
    int res=x;
    for(int i=y;i>1;i--){
        res=res*10+x;
    }
    return res;
}
int main(){
    #ifdef HH
    freopen("G:/input.txt","r",stdin);
    #endif // HH
    scanf("%d",&t);
    int cnt;
    while(t--){
        cnt=0;
        scanf("%d",&n);
        int seat=0;
        int x=n;
        while(x!=0){
            x=x/10;
            seat++;
        }
        if(n<10){
            printf("%d\n",n);
            continue;
        }
        else{
            int xx,ct=0;
            for(int i=1;i<=9;i++){
                xx=fun(i,seat);
                if(n<xx){
                    break;
                }
                else{
                    ct++;
                }
            }
            cnt=ct+(seat-1)*9;
            printf("%d\n",cnt);
        }

    }
    return 0;
}
Last modification:December 14th, 2019 at 11:49 pm
如果觉得我的文章对你有用,请随意赞赏