首页 > 试题广场 >

记数问题

[编程题]记数问题
  • 热度指数:42540 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}试计算在区间 1n\left(1 \leqq n \leqq 10^6\right) 的所有整数中,数字 x0 \leqq x \leqq 9)共出现了多少次。

输入描述:
\hspace{15pt}在一行中输入两个整数 n,x,用空格隔开。其中 n 表示区间上界,x 表示要统计的数字。


输出描述:
\hspace{15pt}输出一个整数,表示数字 x 在区间 [1,n] 中出现的次数。
示例1

输入

11 1

输出

4

说明

在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。
示例2

输入

20 1

输出

12

说明

在区间 120 中,数字 1 出现在 1,10,11,12,13,14,15,16,17,18,19 中,共 12 次。

备注:

#include<stdio.h>
int main()
{
    int n,x;
    scanf("%d%d",&n,&x);
    int count=0;
    for(int i=0;i<=n;i++)
    {
       int temp=i;
        while(temp>0)
        {
            if(temp%10==x) count++;
            temp/=10;
        }
    }
    printf("%d",count);
    return 0;
}
发表于 2026-03-27 14:29:13 回复(0)
int countDigit(int num,int target){
    int cnt=0,digit;
    while (num>0) {
        digit=num%10;
        if (digit==target) {
            cnt++;
        }
        num/=10;
    }
    return cnt;
}

int main() {
    int n,dig,count=0;
    scanf("%d %d",&n,&dig);
    for (int i=1; i<=n; i++) {
        count+=countDigit(i, dig);
    }
    printf("%d",count);
    return 0;
}

发表于 2026-03-25 13:19:21 回复(0)
#include<stdio.h>

int main() {
    int m,n;
    int k=0;
    scanf("%d %d",&m,&n);
    for(int i=1;i<=m;i++) {
        int l=i;
        while (l>0) {
            if (l%10==n) k++;
            l=l/10;
        }
    }
printf("%d",k);
return 0;
}
 关键点是提取个位数和除10右移位的操作,其次是变量定义和使用的区别,避免在循环里反复更新变量。
发表于 2026-03-11 13:35:43 回复(0)
#include<stdio.h>

int main(){
    int n,x,count,a,arr[1000000];
    count=0;
    scanf("%d %d",&n,&x);
    for(int i=1;i<=n;i++){
        arr[i-1]=i;
        }
    for(int j=0;j<n;j++){
        while(arr[j]!=0){
            a=arr[j]%10;
            arr[j]=arr[j]/10;
            if(a==x) count=count+1;
    }
    }
    printf("%d",count);
    return 0;
}
发表于 2026-03-08 11:56:34 回复(0)
#include<stdio.h>
int main(){
    int n, x;
    scanf("%d %d",&n, &x);

    int total = 0;
    for(int i =1;i <= n;i++){
        int temp = i;

        while(temp > 0){
            if(temp % 10 == x){
                total++;
            }
            temp = temp / 10;
        }        
    }

    printf("%d\n",total);
    return  0;
}
发表于 2026-02-24 11:08:21 回复(0)
#include <stdio.h>

int main() {
    int n, x;
    if (scanf("%d %d", &n, &x) != 2 || 1 > n || n > 1000000 || 0 > x || x > 9) {
        return 1;
    }
    int sum = 0;
    for (int i = 1; i <= n; i += 1) {
        int j = i;
        while (j > 0) {
            if (j % 10 == x) {
                sum += 1;
            }
            j /= 10;
        }
    }
    printf("%d", sum);
    return 0;
}

发表于 2026-01-09 22:26:08 回复(0)
#include <stdio.h>

int main()
{
    long n=0;
    scanf("%ld",&n);
    int x=0;
    scanf("%d",&x);
    int num=0;
    for(long i=1;i<=n;i++)
    {
        for(long i1=i;i1!=0;i1=i1/10)
        {
            if(i1%10==x)
            {
                num++;
            }
        }
    }
    printf("%d",num);
    return 0;
}
这道题还是相对来说比较简单的。上面的是楼主的思路,希望能给有需要的人一点启发
发表于 2025-11-24 09:57:00 回复(0)
#include <stdio.h>

int main() {
    int n,x,number,k=0;
    scanf("%d %d",&n,&x);
    for(; n > 0 ; n--){
        number = n;
            while(number>0){
            if((number%10) == x)k++;
            number /= 10;
        }
    }
    printf("%d",k);

}
发表于 2025-11-11 20:57:20 回复(0)
#include <stdio.h>

int times(int x,int target){
    int count=0;
    while(x>0){
        if(x%10==target) count++;
        x/=10;
    }
    return count;
}
int main() {
    int n,x;
    int sum=0;
    scanf("%d %d",&n,&x);
    for(int i=1;i<=n;i++){
        sum+=times(i, x);
    }
    printf("%d\n",sum);
    return 0;
}
//下面是榜一大哥写的代码,谁能给俺分析分析吗
/*

//待分析
/*#include <stdio.h>
 
 
int main() {
    int num = 0;
    int F = 0;
    int loc = 1;
    int cnt = 0;
    scanf("%d%d", &num, &F);
    while (loc <= num) {
        int left = num / loc / 10;
        int right = num % loc;
        int cur = num / loc % 10;
        if (F) {
            cnt += left * loc;
        }
        if (!F && left) {
            cnt += (left - 1) * loc;
        }
        if (cur > F && (F || left)) {
            cnt += loc;
        }
        if (cur == F && (F || left)) {
            cnt += right + 1;
        }
        loc *= 10;
    }
    printf("%d", cnt);
}给我说说这个代码的思路*/
*/
发表于 2025-10-14 18:27:19 回复(0)
#include<stdio.h>
int main()
{
    int n,k,count=0;
    scanf("%d %d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        int m = i;
        while(m>0)
        {
            int t = m%10;
            m = m/10;
            if(t==k)
            count ++;
        }
    }
    printf("%d",count);
    return 0;
}
发表于 2025-07-19 17:42:20 回复(0)
#include<stdio.h>
int Cal_count(int n,int x)
{
    int i = 0;
    int g = 0;
    int count = 0;
    for(i=1;i<=n;i++)
   {
     int j = i;
    while(j)
    {
        g = j%10;
        if(g==x)
        {
            count++;
        }
        j=j/10;
    }
    }
return count;
}
int main()
{
   int n = 0;
   int x = 0;
   scanf("%d %d",&n,&x);
   int ret = Cal_count(n,x);
   printf("%d",ret);
    return 0;
}

发表于 2024-12-27 09:34:07 回复(0)
#include <stdio.h>

int main() {
    int x,n,count=0;
    scanf("%d %d",&n,&x);
    int arr[n];
    for(int i=0;i<=n;i++)//给数组赋值
    {
        arr[i]=i+1;
    }
    for(int i=0;i<=n-1;i++)
    {
        int t = arr[i];
        while(t)
        {
            if(t%10==x)
                count++;
            t=t/10;
        }
    }
    printf("%d",count);
}

发表于 2024-12-15 21:35:02 回复(1)
#include<stdio.h>

int jishu(int i,int x)
{

if(i>9)
{
if(i%10==x)
return (1+jishu(i/10,x));
else
return (0+jishu(i/10,x));

}

else
{
if(i==x)
return 1;
else
return 0;
}

}

int main()
{
int n=0,x=0;
scanf("%d %d",&n,&x);
int a=0;

for(int i=1;i<=n;++i)
{
   a=a+jishu(i,x);
}

printf("%d",a);

    return 0;
}
发表于 2024-08-26 17:27:04 回复(0)
#include <stdio.h>

int oo(int x,int y,int num)
{
    
    if(x%10==y)
    {
        num=num+1;
    }
    if(x<10)
    {
        return num;
    }
    else 
    {
        return oo(x/10,y,num);
    }
}
int main() 
{
    int x,y;
   
    scanf("%d %d",&x,&y);
    int i=0;
    int d=0;
    for(i=1;i<=x;i++)
    {
        int c=0;
        int num=0;
        c=oo(i,y,num);
        d=d+c;
    }
    printf("%d",d);
    return 0;
}

发表于 2024-08-19 15:14:14 回复(0)
#include <stdio.h>

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


发表于 2024-06-21 02:44:58 回复(0)
#include <stdio.h>

int main() 
{
    int n = 0;
    int x = 0;

    int count = 0;
    int i = 0;
    int tem = 0;

    scanf("%d%d", &n, &x);

    for(i = 0; i <= n; i++)
    {
        //取i的各个位,与n进行比较
        tem = i;
        while(tem)
        {
            if(tem % 10 == x)
            {
                count++;
            }
            tem /= 10;
        }
    }


    printf("%d\n", count);

    return 0;
}

编辑于 2024-04-02 22:27:28 回复(0)
#include <stdio.h>

int main() {
    int n, m;
    int count = 0;
    while (scanf("%d%d", &n, &m)==2) {
        if (m <= 9) {
            count++;
        }
        int i;
        for (i = 10; i <= n; i++) {
            int temp=i;
                while (temp) {
                    if (m == temp%10) {
                        count++;
                    }
                    temp /= 10;
                }
            }
    }
    printf("%d", count);
    return 0;
}
发表于 2024-03-21 20:17:54 回复(0)
#include <stdio.h>

int main()
{
    int n, x;
    int count = 0;
    scanf("%d %d", &n, &x);

    for (int i = 1; i <= n; i++)//每一次循环判断一个数,直到n为止
    {
        int a = i;
        while (a)//利用while循环判断每一位数字,直到a等于0,
        {
            if (a % 10 == x)//如果个位上的数字是x,count加一
                count++;
            a /= 10;//将个位上的数字去除,十位上的数字变成个位上的数字
        }
    }

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

编辑于 2024-02-28 09:26:10 回复(0)
#include <stdio.h>
void fun(int i, int x, int* p) {
    int a;
    while (i) {
        a = i % 10;
        i = i / 10;
        if (a == x) {
            (*p)++;
        }
    }
}
int main() {
    int n = 0, x = 0, count = 0;
    int arr[1000] = { 0 };
    scanf("%d %d", &n, &x);
    for (int i = 0; i <= n; i++) {
        arr[i] = i;
    }

    for (int i = 0; i <= n; i++) {
        fun(i, x, &count);
    }
    printf("%d", count);
    return 0;
}//看着唬人,其实很好理解
发表于 2023-12-28 13:38:24 回复(0)