8 条题解

  • 4
    @ 2022-12-26 15:47:50

    极简题解

    #include <iostream>
    using namespace std;
    int main()
    {
        int n, x, k = 0;
        char *a;
        cin >> n >> x;
        for (int i = 1; i <= n; i++)
            for (int j = i; j; j /= 10)
                if (j % 10 == x)
                    k++;
        cout << k;
        return 0;  
    }
    
    • 3
      @ 2022-9-27 20:57:28

      题解

      这道题太氵了,如果你看过 [入门][NOIP2010 普及组] 数字统计 那么我的题解里就有这道题。 直接套用过来,L=1L = 1,完成。 当然我们还是写一遍正常的。

      #include <bits/stdc++.h>
      using namespace std;
      int n, ans, k;
      int check(int num)
      {
          int ans = 0;
          while (num > 0)
          {
              ans += (num % 10) == k;
              num /= 10;
          }
          return ans;
      }
      int main()
      {
          scanf("%d%d", &n, &k);
          for (int i = 1; i <= n; i++)
              ans += check(i);
          printf("%d\n", ans);
          return 0;
      }
      // 实在没啥可写的了
      

      ACAC CodeCode

      #include <bits/stdc++.h>
      using namespace std;
      int n, ans, k;
      int check(int num)
      {
          int ans = 0;
          while (num > 0)
          {
              ans += (num % 10) == k;
              num /= 10;
          }
          return ans;
      }
      int main()
      {
          scanf("%d%d", &n, &k);
          for (int i = 1; i <= n; i++)
              ans += check(i);
          printf("%d\n", ans);
          return 0;
      }
      
      • 2
        @ 2023-9-27 21:13:35
        #include <bits/stdc++.h>
        using namespace std;
        int main()
        {
            int n,x,num = 0;
            cin >> n >> x;
            for(int i = 1; i <= n; i++)
            {
                int sum = i;
                while(sum > 0)
                {
                    if(sum % 10 == x)
                    {
                        num++;
                    }
                    sum /= 10;
                }
            }
            cout << num;
            return 0;
        }
        
        • 1
          @ 2023-8-30 19:00:25

          定义一个函数来查找: to_string 是C++98没有的 可以用C++ 14或C++ 11

          #include <iostream>
          #include <string>
          
          using namespace std;
          
          int count_ccurrences(int n, int x) {
              int count = 0;
              for (int num = 1; num <= n; num++) {
                  string numStr = to_string(num);
                  for (char c : numStr) {
                      if (c - '0' == x) {
                          count++;
                      }
                  }
              }
              return count;
          }
          
          int main() {
              int n, x;
              cin >> n >> x;
              int result = count_ccurrences(n, x);
              cout << result << endl;
              return 0;
          }
          
          </span>
          • 1
            @ 2022-10-18 20:56:46

            这不跟[NOIP2010 普及组] 数字统计差不多吗???

            ————————————————————————————————————————

            思路: 从1~n过一遍,每次将 i 分解,判断 i 的每一个数位 t 是不是 x 。

            ————————————————————————————————————————

            //l是1~n,r是出现了多少次
            for(int i=1;i<=l;i++)  //循环开始
            {
            	int num=0;
                int j=i;   //这个不加打0分
            	while(j>0)
            	{
            		int t=j%10;
            		if(t==r)   //判断
            			num++;
            		j/=10;
            	}
            	sum+=num;
            }
            

            最后求个赞!

            • 1
              @ 2022-10-2 15:56:57

              正常思路:

              #include <cstdio>
              
              inline int reader(){
                  省略
              }
              
              int n , x , ans;
              
              short finder(int a){
                  //遍历每一位,计算
              	int al = 0 ;
              	if(a == 0 && x == 0) al ++ ;
              	while(a)
              		al += (a % 10 == x),
              		a /= 10 ;
              	return al ;
              }
              
              int main(){
              	n = reader() ;
              	x = reader() ;
              	for(int i = 1 ; i <= n ; i ++)
              		ans += finder(i);
              	printf("%d" , ans) ;
              	return 0 ;
              } //内存小,但时间长容(bu)易(hui)超时
              

              另一个思路

              #include <cstdio>
              
              inline int reader(){
              	int it = 0 , chr = getchar() ;
              	while('0' > chr || chr > '9')
              		chr = getchar() ;
              	while('0' <= chr && chr <= '9')
              		it = (it << 3) + (it << 1) + chr - '0' ,
              		chr = getchar() ;
              	return it ; 
              }
              
              int n , x , ans , f[1000005];
              
              short finder(int a){
                  //众所周知,a包含几个n 就是 a % 10 和 a / 10 包含的n和
                  //所以可以额外消耗亿点点内存换更快的速度
              	if(a < 10)
              		return (f[a] = (a % 10 == x)) ;
                  //个位单独处理
              	f[a] = f[a / 10] + f[a % 10] ;
                  //否则就相加 
              	return f[a] ; 
              }
              
              int main(){
              	n = reader() ;
              	x = reader() ;
              	f[0] = (x == 0);
              	for(int i = 1 ; i <= n ; i ++)
              		ans += finder(i);
              	printf("%d" , ans) ;
                  //其他真没啥好说的
              	return 0 ;
              }
              
              • 1
                @ 2022-9-4 9:22:19

                这个其实就是数位分离然后一个一个判断是否是输入的x。

                #include <bits/stdc++.h>
                using namespace std;
                int n, x, num;
                int main()
                {
                	cin >> n >> x;
                	for (int i = 1; i <= n; i ++)
                	{
                		int k = i;//防止i被打乱,将i赋值给k。
                		while (k > 0)//数位分离
                		{
                			if (k % 10 == x)  num ++;//判断是否是x。
                			k /= 10;
                		}
                	}
                	cout << num;
                }
                

                放心研究,已AC。 给个好评吧。

                • 0
                  @ 2024-2-5 19:53:09
                  #include <iostream> 
                  using namespace std;
                  int n,x,num;
                  int main()
                  {
                      cin>>n>>x;
                      for(int i=1;i<=n;i++){
                          int y=i;
                          while(y>0){
                              if(y%10==x)
                                  num++;
                              y/=10;
                          }
                      }
                      cout<<num;
                      return 0;
                  }
                  
                  • 1

                  [入门][NOIP2013 普及组] 计数问题

                  信息

                  ID
                  1482
                  时间
                  1000ms
                  内存
                  256MiB
                  难度
                  3
                  标签
                  递交数
                  348
                  已通过
                  194
                  上传者