题解

210 条题解

  • 0
    @ 2022-06-23 17:30:04
    #include <iostream>
    using namespace std;
    int main()
    {
        int n,res=0,m;
        cin >> n >> m;
        for (int i = 1;i <= n;i ++)
        {
            int ans = i;
            while (ans > 0)
            {
                if (ans % 10 == m)
                {
                    res ++;
                }
                ans /= 10;
            }
        }
        cout << res;
        return 0;
    }
    
  • 0
    @ 2021-10-24 11:27:15

    就枚举每个数字之中有多少个目标的数就行了复杂度 \(O(nlgn)\)。
    ```
    #include<stdio.h>

    int n,x;
    int ans;

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

  • 0
    @ 2021-10-22 14:14:36

    #include<iostream>
    using namespace std;
    int main()
    {
    int a,b=0,c,e;
    cin>>a>>c;
    for(int i=1;i<=a;i++)
    {
    e=i;
    while(e>0)
    {
    if(e%10==c)
    b+=1;
    e=e/10;
    }
    }
    cout<<b;
    }

  • 0
    @ 2021-10-11 16:38:13

    n,x=input().split()
    res=0
    for i in range(1,int(n)+1):
    res+=str(i).count(x)

    print(res)

  • 0
    @ 2021-10-11 16:37:22

    n,x=input().split()
    res=0
    for i in range(1,int(n)+1):
    res+=str(i).count(x)

    print(res)

  • 0
    @ 2021-07-13 10:23:29

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

  • 0
    @ 2021-05-18 09:20:09
    import java.io.*;
    import java.util.*;
    
    
    /**
     * @author wpx
     * @version V1.0
     * @Package com.test
     * @date 2021/5/17 14:13
     */
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
            int endNum = sc.nextInt();
            int findNum = sc.nextInt();
            int[] fixedZeroNum = new int[]{0, 9, 108, 1107, 11106, 111105, 1111104, 11111103};
            int[] zeroCountNum = new int[]{0, 1, 11, 111, 1111, 11111, 111111, 1111111};
            // 先转换为字符串
            String endNumStr = String.valueOf(endNum);
            int strEndPos = endNumStr.length() - 1;
            int count = 0;
            // 从前往后
            for(int i = 0; i < endNumStr.length(); i++){
                // 按照千位、百位、十位、个位的顺序
                // 对应位置上的数字
                Integer num = Integer.parseInt(String.valueOf(endNumStr.charAt(i)));
                // 位数
                int digitNum = strEndPos - i;
                int preCount;
                if (findNum == 0) {
                    // 特殊处理
                    if(digitNum == 0){
                        preCount = 0;
                    } else {
                        preCount = (int) ((digitNum - 1 ) * Math.pow(10, digitNum - 1));
                        preCount -= zeroCountNum[digitNum - 1];
                    }
                } else {
                    preCount = (int) (digitNum * Math.pow(10, digitNum -1));
                }
    
                if(findNum != 0){
                    if(num > findNum){
                        // 加上累计值
                        count += num * preCount;
                        // 加上以findNum开头的数量
                        count += (int) Math.pow(10, digitNum);
                    } else if (num < findNum) {
                        // 加上累计值
                        count += num * preCount;
                    } else {
                        count += num * preCount;
                        if(i + 1 < endNumStr.length()) {
                            count += Integer.parseInt(endNumStr.substring(i + 1));
                        }
                        count += 1;
                    }
                } else {
                    count += num * (preCount + digitNum); 
                    // 补上一位的0
                    if(num - 1 > 0 && digitNum - 1 >= 0){
                        count += (num - 1) * fixedZeroNum[digitNum - 1];
                    }
                    // 补0
                    if(i != 0 && num - 1 > 0){
                        count += fixedZeroNum[digitNum];
                    }
                }
    
            }
            System.out.println(count);
        }
    }
    
  • 0
    @ 2021-03-25 20:31:23
    #include<iostream>
    using namespace std;
    class sde{
        public:
            int qumo(int n)
            {
                return n%10;
            }
            int geshu(int *n,int *x)
            {
                int cnt=0;
                for(int i=1;i<=*n;i++)
                {
                    int nn=i;
                    while(nn>=1)
                    {   
                        int m=qumo(nn);
                        nn/=10;
                        if(m==*x)
                            cnt++;
                    }
                }
                
                return cnt;
            }
        private:
    }k;
    int main()
    {
        int n,x;scanf("%d%d",&n,&x);
        int cnt=k.geshu(&n,&x);
        printf("%d",cnt);
        return 0;
    }
    
  • 0
    @ 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)
    
    
  • 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

    方法一:暴力

    代码:

    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-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;
    }

信息

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