【Acwing338】计数问题题解

news2024/11/17 23:06:48

题目描述

举个栗子+分类讨论

求a~b中x的个数,可以转换为1~b中x的个数减去1~a-1中x的个数

所以核心是求1~n中x的个数,可以转换为求x在1~n中每一个数的每一位上出现的次数的和

假设要求1~abcdefg(这是一个七位数)中x=1的个数,可以求1在个位数上出现的总次数n1、1在十位数上出现的总次数n2、1在百位数上出现的总次数n3......以此类推,然后把n1、n2...求和,即为1~n之间所有数字1出现的总次数,同理其它数字0,2,3,...,9,也用类似的方式加起来即可。

现在以“1在第4位上出现的总次数”为例,进行分类讨论

1<=xxx1yyy<=abcdefg

如果xxx=0~abc-1,那么yyy可以取遍000~999,总共的情况数为:1000*abc

特例:如果在这里是求0在第4位上出现的总次数,那么xxx不能为0,此时总情况为999*abc

如果xxx=abc:

如果d<1,此时1不可能在第4位上出现

如果d=1,此时yyy可以取遍000~efg,总共efg+1种情况

如果d>1,此时yyy可以取遍000~999,总共1000种情况

所以当n=abcdefg时,“1在第4位上出现的总次数”就是1000*abc+efg+1+1000

当求1在其他位上出现的总次数时,只需要和上述类比即可

同理,求其他数字出现的次数时,和重复上述方法即可(注意上述说的x=0的一个小特殊情况)

代码与注释

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int a,b;
int power10(int i)//计算10的i次方
{
    int res=1;
    while(i)
    {
        res*=10;
        i--;
    }
    return res;
}
LL count(int n,int x)//统计1~n中x出现了多少次
{
    if(!n)return 0;
    LL res=0;
    int cnt=0;
    int temp=n;
    while(temp)
    {
        temp/=10;
        cnt++;
    }
    for(int i=0;i<cnt;i++)
    {
        int l=n/power10(i+1);//得到所求那一位的左边的数,比如例子中abcdefg,左边的就是abc,右边的就是efg
        int r=power10(i);//得到10的所求那一位的右边的位数次幂,比如例子中abcdefg,d右边的efg是三位数,得到1000
        if(x)res+=r*l;
        else res+=(l-1)*r;
        int d=(n/r)%10;//abcdefg中的d
        if(d==x)res+=(n%r)+1;
        else if(d>x)res+=r;
    }
    return res;
}
int main()
{
    while(cin>>a>>b,a||b)
    {
        if(a>b)swap(a,b);
        for(int i=0;i<=9;i++)
        cout<<count(b,i)-count(a-1,i)<<" ";
        cout<<endl;
    }
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/932762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shell基础_Shell概述及脚本执行方式

文章目录 1. Shell概述1.1 Shell是什么1.2 Shell的分类1.3 Linux支持的Shell1.4 总结 2. Shell脚本的执行方式2.1 echo输出命令2.2 第一个脚本2.3 脚本执行 1. Shell概述 1.1 Shell是什么 Shell是一个命令行解释器&#xff0c;它为用户提供了一个向Linux内核发送请求以便运行…

深度学习8:详解生成对抗网络原理

目录 大纲 生成随机变量 可以伪随机生成均匀随机变量 随机变量表示为操作或过程的结果 逆变换方法 生成模型 我们试图生成非常复杂的随机变量…… …所以让我们使用神经网络的变换方法作为函数&#xff01; 生成匹配网络 培养生成模型 比较基于样本的两个概率分布 …

结合源码拆解Handler机制

作者&#xff1a;Pingred 前言 当初在讲App启动流程的时候&#xff0c;它的整个流程涉及到的类可以汇总成下面这张图&#xff1a; 那时着重讲了AMS、PMS、Binder这些知识点&#xff0c;有一个是没有对它进行详细讲解的&#xff0c;那就是常见的Handler&#xff0c;它不仅在这个…

一篇掌握BFD技术(一):静态路由与BFD联动配置

1. 实验目的 熟悉静态路由与BFD联动的应用场景掌握静态路由与BFD联动的配置 2. 实验拓扑 想要华为数通配套实验拓扑和配置笔记的朋友们点赞关注&#xff0c;评论区留下邮箱发给你 3. 实验步骤 1&#xff09;配置IP地址 AR1的配置 <Huawei>system-view Enter system…

Linux——socket网络通信

一、什么是socket Socket套接字 由远景研究规划局&#xff08;Advanced Research Projects Agency, ARPA&#xff09;资助加里福尼亚大学伯克利分校的一个研究组研发。其目的是将 TCP/IP 协议相关软件移植到UNIX类系统中。设计者开发了一个接口&#xff0c;以便应用程序能简单地…

继续深挖,Jetpack Compose的State快照系统

Jetpack Compose 有一种特殊的方式来表示状态和传播状态变化&#xff0c;从而驱动最终的响应式体验&#xff1a;状态快照系统&#xff08;State snapshot system&#xff09;。这种响应式模型使我们的代码更加强大和简洁&#xff0c;因为它允许组件根据它们的输入自动重组&…

Docker安装及Docker构建简易版Hadoop生态

一、首先在VM创建一个新的虚拟机将Docker安装好 更新系统&#xff1a;首先打开终端&#xff0c;更新系统包列表。 sudo apt-get update sudo apt-get upgrade下图是更新系统包截图 安装Docker&#xff1a;使用以下命令在Linux上安装Docker。 sudo apt-get install -y docker.i…

离谱事件解决方法2 无法定位程序输入点XXX于动态链接库XXX.dll

事情经过&#xff1a; 本人一只acmer&#xff0c;使用sublime编写代码&#xff0c;但是前两天在打开cpp类型的文件的时候显示报错如下&#xff1a; 这里的dll文件就是动态链接库&#xff0c;它并不是一个可执行文件&#xff0c;里面存放的是程序的函数实现过程&#xff08;公用…

postgresql基于postgis常用空间函数

1、ST_AsGeoJSON 图元转geojson格式 select ST_AsGeoJSON(l.geom) from g_zd l limit 10 2、 ST_Transform 坐标转换 select st_transform(l.shape, 3857) from sde_wf_cyyq l limit 10select st_astext(st_transform(l.shape, 3857)) from sde_wf_cyyq l limit 103、st_aste…

创建本地镜像

通过前面文章的阅读&#xff0c;读者已经了解到所谓的容器实际上是在父镜像的基础上创建了一个可读写的文件层级&#xff0c;所有的修改操作都在这个文件层级上进行&#xff0c;而父镜像并未受影响&#xff0c;如果读者需要根据这种修改创建一个新的本地镜像&#xff0c;有两种…

【位运算进阶之----左移(<<)】

今天我们来谈谈左移这件事。 ❤️简单来说&#xff0c;对一个数左移就是在其的二进制表达末尾添0。左移一位添一个0&#xff0c;结果就是乘以2&#xff1b;左移两位添两个0&#xff0c;结果就乘以2 ^ 2&#xff1b;左移n位添n个0&#xff0c;结果就是乘以2 ^ n&#xff0c;小心…

shopee店铺如何注册?卖家需要准备哪些材料?

shopee是这两年发展迅速的东南亚电商平台&#xff0c;国内也是有越来越多的卖家入驻开店。目前&#xff0c;Shopee入驻的门槛是比较低的&#xff0c;卖家账号注册也比较简单。如果你想入驻Shopee&#xff0c;但是又不知道要这么注册卖家账号&#xff0c;那么就要往下看了。 申请…

ch3_1汇编语言程序的源程序

mark 一下&#xff0c; 2023.Aug.15 从湖北返回学习&#xff0c;参加了一场学术会议&#xff0c; 看来做学术确实是需要交流的&#xff0c; 尤其该领域的多交流&#xff0c; 还是需要至少一年参加一次学术会议. &#xfeff; 不至于让自己太孤陋寡闻&#xff0c; 局限于自…

小程序如何手动变更会员卡等级

有时候需要商家手动变更会员卡等级&#xff0c;以让会员获取更多的福利和特权。下面就介绍一些小程序手动变更会员卡等级的常见方法和策略。 1. 找到指定的会员卡。在管理员后台->会员管理处&#xff0c;找到需要更改等级的会员卡。也支持对会员卡按卡号、手机号和等级进行…

宝塔计划任务读取文件失败

想挂计划任务 相关文章【已解决】计划任务读取文件失败 - Linux面板 - 宝塔面板论坛 对方反馈的是执行下面的命令 chattr -ai /var/spool/cron 后来发现直接没有这个文件夹&#xff0c;然后通过mkdir命令创建文件夹&#xff0c;成功在宝塔创建了计划任务 后面发现任务虽然添…

Markdown初级使用指南

前言 大家好&#xff0c;我是艾老虎尤&#xff0c;我在一篇官方的文章中&#xff0c;我了解到了markdown&#xff0c;原本我写博客一直是使用的富文本编译器&#xff0c;之前我也有同学叫我使用MD&#xff0c;但是我嫌它复杂&#xff0c;就比如说一个标题&#xff0c;我在富文…

SFM structure from motion

struction就是空间三维点的位置 motion 就是相机每帧的位移 https://www.youtube.com/watch?vUhkb8Zq-dnM&listPL2zRqk16wsdoYzrWStffqBAoUY8XdvatV&index9

单片机学习-蜂鸣器电子元件

蜂鸣器是有什么作用的&#xff1f; 蜂鸣器 是 一种 一体化结构 的电子训响器&#xff0c;可以发出声音的电子元器件 蜂鸣器分类&#xff1f; ①压电式蜂鸣器&#xff08;图左&#xff09; 称&#xff1a; 无源蜂鸣器 ②电磁式蜂鸣器&#xff08;图右&#xff09; 称&#xf…

ISIS路由协议

骨干区域与非骨干区域 凡是由级别2组建起来的邻居形成骨干区域&#xff1b;级别1就在非骨干区域&#xff0c;骨干区域有且只有一个&#xff0c;并且需要连续&#xff0c;ISIS在IP环境下目前不支持虚链路。 路由器级别 L1路由器只能建立L1的邻居&#xff1b;L2路由器只能建立L…

SpringCloud学习笔记(十)_SpringCloud监控

今天我们来学习一下actuator这个组件&#xff0c;它不是SpringCloud之后才有的&#xff0c;而是SpringBoot的一个starter&#xff0c;Spring Boot Actuator。我们使用SpringCloud的时候需要使用这个组件对应用程序进行监控与管理 在SpringBoot2.0版本中&#xff0c;actuator可以…