题解

187 条题解

  • 13
    @ 2018-12-03 15:41:32
    #include<iostream>
    using namespace std;
    int main(){
        int n,x,sum=0;
        cin>>n>>x;
        for(int i=1;i<=n;i++){
            int t=i;
            while(t>0){
                if(t%10==x) sum++;
                t/=10;
            }
        }
        cout<<sum<<endl;
        return 0;
    }
    
  • 13
    @ 2017-02-26 13:33:44

    #include <stdio.h>

    int main()
    {
    int i,n,x,k=0,j;
    scanf("%d %d",&n,&x);
    for(i=1;i<=n;i++)
    {
    j=i;
    while(j)
    {
    if(j%10==x)
    k++;
    j=j/10;

    }

    }
    printf("%d",k);
    return 0;
    }

  • 4
    @ 2020-08-01 19:17:28

    数位dp写法,全部1ms

    #include <bits/stdc++.h>
    #define fu(a, b, c) for (int a = b; a <= c; a++)
    #define fd(a, b, c) for (int a = b; a >= c; a--)
    using namespace std;
    int a[10],dp[10][10][2],n,q,cnt;
    
    int dfs(int pos,int sta,int pre,int limit) {
        if(pos==-1)
            return sta;
        if(!limit&&dp[pos][sta][pre]!=-1) {
            return dp[pos][sta][pre];
        }
        int up=limit?a[pos]:9,tmp=0;
        fu(i,0,up) {
            int nsta=sta+(i==q);
            if(!q&&!pre)
                nsta=sta;
            tmp+=dfs(pos-1,nsta,i||pre,limit&&i==a[pos]);
        }
        if(!limit)
            dp[pos][sta][pre]=tmp;
        return tmp;
    }
    
    int solve(int x) {
        cnt=0;
        memset(dp,-1,sizeof dp);
        while(x) {
            a[cnt++]=x%10;
            x/=10;
        }
        return dfs(cnt-1,0,0,1);
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n>>q;
        cout<<solve(n)<<'\n';
    }
    
    
    
    • @ 2020-10-27 20:25:29

      大佬能不能加个注释...
      刚学dp的我看不懂...

    • @ 2020-12-21 22:02:50

      @saaaaad: 这个是数位dp的祖传格式,可以百度一下,变量含义都差不多的。

  • 4
    @ 2019-08-18 15:16:54

    还是先分析思路:
    1. 输入数据,终止点和查找字符
    2. for循环判断

    1. 定义临时判断数据temp,将它的值设为控制器i的值
    2. while循环

    1. 条件:temp > 0(原因后面再说)
    2. 如果temp的末位是x,则ans++,然后temp去掉末位继续判断(原因知道了吧)
    3.输出ans

    //C++
    #include <iostream>
    using namespace std;
    
    int main()
    {
      int n,x,ans = 0;
        cin >> n >> x;
        for(int i = 1;i <= n;i++)
        {
            int temp = i;
            while(temp > 0)
            {
                if(temp % 10 == x)
                {
                    ans++;
                }
                temp /= 10;
            }
        }
        cout << ans << endl;
    }
    

    这题比较简单,稍微有些基础的人就可以做出来
    祝大家AC!
    点赞吧!

  • 1
    @ 2021-01-20 21:25:31

    python直接用str中的count方法

    n,x = map(int,input().split())
    sum = 0
    for i in range(1,n+1):
        if str(x) in str(i):
            b = str(i).count(str(x))
            sum+=b
    print(sum)
    
    
  • 1
    @ 2020-12-22 16:33:47

    我永远爱CSDN
    https://blog.csdn.net/beguile/article/details/103635707 学的函数
    Python 永远的神
    三行哈哈哈哈

    TempNum = input().split(' ')
    list1 = str(list(range(1,int(TempNum[0])+1)))
    print(list1.count(TempNum[1]))
    

    所以python永远的神(bushi)
    暴力(会超时)

    TempStr = input()
    TempNum = TempStr.split(' ')
    n = int(TempNum[0])
    x = int(TempNum[1])
    ans = 0
    for i in range(1,n+1):
        Temp = i
        while(Temp>0):
            if (Temp%10==x):
                ans+=1
            Temp//=10
    print(ans)
    
  • 1

    方法一:暴力

    代码:

    var
     n,x,i,j,s:longint;
    begin
     readln(n,x);
     for i:=1 to n do
      begin
       j:=i;
       while j>0 do
        begin
         if j mod 10=x then inc(s);
         j:=j div 10;
        end;
      end;
     write(s);
    end.
    

    方法二:dp

    代码:

    var
     n,x,i,s:longint;
     a:array[0..10000003] of longint;
    begin
     readln(n,x);
     for i:=1 to n do
      if i mod 10=x then a[i]:=a[i div 10]+1
       else a[i]:=a[i div 10];
     for i:=1 to n do s:=s+a[i];
     write(s);
    end.
    
    
  • 0
    @ 2020-12-27 21:19:52

    #include <iostream>
    using namespace std;
    int main()
    {
    int n,x,i,t,ans=0;
    cin>>n>>x;
    for(i=1;i<=n;i++){
    t=i;
    while(t>0){
    if(t%10==x){
    ans++;
    }
    t/=10;
    }
    }
    cout<<ans;
    return 0;
    }

  • 0
    @ 2020-11-21 18:03:59
    #include <cstdio>
    
    int n,m,s;
    
    int pd(int x)
    {
        while (x!=0)
        {
            if (x%10==m) s++;
            x/=10;
        }
    }
    
    int main()
    {
        scanf("%d%d", &n,&m);
        for (int i=1;i<=n;i++) pd(i);
        printf("%d", s);
        return 0;
    }
    
  • 0
    @ 2020-09-12 19:09:29
    #include <stdio.h>
    
    int main(){
        int n;
        char x;
        char str[10];
        scanf("%d %c",&n,&x);
        int count=0;
        for (int i=1;i<=n;i++){
            sprintf(str,"%d",i);
            char *go=str;
            while(go[0]){
                if (go[0]==x){
                    count++;
                }
                go++;
            }
        }
        printf("%d\n",count);
        return 0;
    }
    
    
  • 0
    @ 2020-08-25 22:54:12

    请在代码中细看,有很多注释

    #include<cstdio>
    #include<iostream>
    const int N = 100000000 + 10;
    char a[N];
    //#define _DEBUG_ //把这一句删了或者注释了都可以直接去掉日志输出
    using namespace std;
    int main()
    {
        int end,needle;//采用大海捞针的思想
        int cnt = 0;//统计
        cin >> end >> needle;//输入
        //freopen("output.out", "w", stdout);
        for (int i = 1; i <= end; i++)//sea
        {
    #ifdef _DEBUG_
            cout << "searching " << i << endl;
    #endif
            if (i < 10)//如果是一位数
            {
                if (i == needle)//比较
                {
                    cnt++;//统计
    #ifdef _DEBUG_
                    cout << "   successfully found member in " << i << endl;
    #endif
                }
            }
            else//大于两位数
            {
                int x = i;//拿取数据
                /*采用的思想:
                    如果 当前循环的数 还是两位数
                    那么
                        如果 当前循环的数的最后一位 和查找对象 不相等
                            那么扔掉最后一位
                        否则 统计并扔掉最后一位
                    否则 跳出循环
                */
                    
                while (x >= 10)//开始循环...
                {
                    if (x % 10 != needle)//拿取最后一位进行比较
                    {
                        x /= 10;//如果不是,那么扔掉最后一位
                    }
                    else
                    {
    #ifdef _DEBUG_
                        cout << "   successfully found member in " << i << endl;
    #endif
                        x /= 10;
                        cnt++;
                    }
                }
                if (x == needle)
                {
                    cnt++;
    #ifdef _DEBUG_
                    cout << "   successfully found member in " << i << endl;
    #endif
                }
            }
        }
        //fclose(stdout);
        cout << cnt << endl;
        return 0;
    }
    
  • 0
    @ 2020-07-28 12:18:10

    #include <stdio.h>
    int main()
    {
    int i,j,z,x,sum=0;;
    scanf("%d %d",&i,&j);
    for(z=1;z<=i;z++)
    {
    x=z;
    do{
    if(x%10==j)
    sum++;
    x=x/10;
    }
    while(x>0);

    }
    printf("%d",sum);
    }

  • 0
    @ 2019-09-06 14:47:52

    #include <stdio.h>

    int main()
    {
    int n,x;
    int num = 0;
    int i;
    int temp;
    scanf("%d %d",&n,&x);
    for(i = 1;i <= n;i++)
    {
    temp = i;
    do
    {
    if(temp % 10 == x)
    num++;
    temp /= 10;
    }
    while(temp);
    }
    printf("%d\n",num);
    }

  • 0
    @ 2019-02-17 16:31:21

    第一次写题解,dalao不要见笑~刚学半年,程序可能不是最简的
    附上代码:
    /*
    思路(dalao不要见笑):
    1.输入
    2.数据处理
    2.1 i:循环从1到n;
    2.2 备份i;
    2.3 求个数
    3.输出
    */
    #include<iostream>
    //#include<string>
    //#include<cstring>我的缺省源自己搞出来的
    using namespace std;
    int c;//全局变量自动归零(:
    int main()
    {
    int n,x,temp;//nx不用说了,temp临时做数据处理用
    cin>>n>>x;
    for(int i=1;i<=n;i++)
    {
    int temp=i;//备份(i循环还要使用);
    while(temp>0)
    {
    if(temp%10==x)
    c++;
    temp/=10;//直到/10后小于0才结束;
    }
    }
    cout<<c;
    return 0;
    }

  • 0
    @ 2018-05-10 21:08:27

    C++ ac,老人小孩都看的懂

    #include<iostream>
    using namespace std;

    int main()
    {
    int n,m,s=0,i,t,t1;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
    t=i;
    while(t>0)
    {
    t1=t%10;
    if(t1==m) s++;
    t=t/10;
    }
    }
    cout<<s;
    }

  • 0
    @ 2018-04-21 21:36:19

    #include <iostream>
    using namespace std;
    int main()
    {
    long int n;
    int a,x,k[10]={0,0,0,0,0,0,0,0,0,0};
    scanf("%ld%d",&n,&x);
    for(long int i=1;i<=n;i++)
    {
    a=i;
    while(a!=0)
    {
    k[a%10]++;
    a=a/10;
    }
    }
    printf("%d",k[x]);
    return 0;
    }

  • 0
    @ 2018-04-21 21:36:05

    #include <iostream>
    using namespace std;
    int main()
    {
    long int n;
    int a,x,k[10]={0,0,0,0,0,0,0,0,0,0};
    scanf("%ld%d",&n,&x);
    for(long int i=1;i<=n;i++)
    {
    a=i;
    while(a!=0)
    {
    k[a%10]++;
    a=a/10;
    }
    }
    printf("%d",k[x]);
    return 0;
    }

  • 0
    @ 2018-04-16 23:20:58
    #include<iostream>
    using namespace std;
    int main()
    {
        int n, m;
        cin >> n >> m;
        int c = 0;
        for (int i = 1; i <= n; i++)
        {
            int k = i;
            while (k)
            {
                if (k % 10 == m)
                    c++;
                k /= 10;
            }
        }
        cout << c;
        return 0;
    }
    
  • 0
    @ 2018-03-27 19:33:26

    #include<iostream>
    #include<cstdio>
    using namespace std;

    int main() {
    int n, num, i, t, a;
    int sum = 0;
    scanf("%d %d", &n, &num);
    t = n;
    for(i = 1; i <= n; i++) {
    a = i;
    while(a) {
    if(a%10==num)
    sum++;
    a /= 10;
    }
    }
    printf("%d", sum);
    }

  • 0
    @ 2018-03-18 20:26:13

    纯模拟题,建议C、C++蒟蒻练手。

    #include<bits/stdc++.h>
    using namespace std ;
    //Vijos P1848
    
    int x , y , ans ;
    int num(int n)
    {
        int ans = 0 ;
        while (n > 0)//枚举n的每一位上的数
        {
            if (y == n % 10)
                ans ++ ;//求个数
            n /= 10 ;
        }
        return ans ;//返回个数
    }
    int main()
    {
        cin >> x >> y ;
        for (int i = 1 ; i <= x ; i ++)
        {
            ans += num(i) ;//枚举,累加个数
        }
        cout << ans ;
        return 0 ;
    }
    

信息

ID
1848
难度
5
分类
(无)
标签
递交数
14768
已通过
5192
通过率
35%
被复制
18
上传者