zoukankan      html  css  js  c++  java
  • 洛谷 P1980.计数问题

    洛谷 P1980.计数问题

    题目描述

    试计算在区间 1 到 n 的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在 1到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。

    输入格式

    2个整数n,x之间用一个空格隔开。

    输出格式

    1个整数,表示x出现的次数。

    输入输出样例

    输入样例#1
    11 1
    
    输出样例#1
    4
    

    说明/提示

    对于 100%的数据,1≤n≤1,000,000,0≤x≤9。

    题目思路

    nlog(n)解法

    #include<iostream>
    #define ll long long int
    using namespace std;
    
    int main()
    {
        ll n,x,sum=0,t;
        scanf("%lld%lld",&n,&x);
        for(ll i=1;i<=n;i++)
        {
            t = i;
            do{
                if(t%10==x)sum++;
                t/=10;
            }while(t);
        }
        printf("%lld",sum);
        return 0;
    }
    

    log(10n)解法
    如:

    n=728,x=7

    可以按照这样的思路:

    个位7:73个 7,17,...,727

    十位7:70个 7079,170179,...,670~679

    百位7:29个 700~728

    答案是172

    #include<iostream>
    using namespace std;
    int main()
    {
        int n,x,m=1,ans=0;
        scanf("%d%d",&n,&x);
        while(m<=n)
        {
            int a=n/(m*10),b=n/m%10,c=n%m; //a,b,c为n的三部分,求哪一位x的个数,b就为那一位数,a为b左边的数,c为b右边的数,如求1~728中十位7的个数,则a=7,b=2,c=8
            if(x)
            {
                if(b>x) ans+=(a+1)*m; //如果b>x,说明有(a+1)*m个x(如求1~728中个位7的个数,则为(72+1)*1=73)
                if(b==x) ans+=a*m+c+1; //如果b=x,说明有a*m+c+1个x(如求1~728中百位7的个数,则为0*100+28+1=29)
                if(b<x) ans+=a*m; //如果b<x,说明有a*m个x(如求1~728中十位7的个数,则为7*10个)
            }
            else    //x=0的情况和x!=0的情况有所不同
            { 
                if(b) ans+=a*m;
                else ans+=(a-1)*m+c+1;
            }
            m*=10;
        }
        printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    guava学习--集合2&Range
    guava学习--集合1
    guava学习--FluentIterable
    guava学习--Supplier Suppliers
    guava--Joiner、Splitter、MapJoinner、MapSplitter
    python_输入一个数,判断是否是素数
    python_33_文件操作2
    python_32_文件操作1
    python_31_集合
    python_输出100:200内的素数
  • 原文地址:https://www.cnblogs.com/fsh001/p/12271205.html
Copyright © 2011-2022 走看看