当前位置: 首页 > news >正文

洛谷 P1179【NOIP 2010 普及组】数字统计 —— 逐位计算

题面:P1179 [NOIP 2010 普及组] 数字统计 - 洛谷


 

一:题目解释:

        需要求一区间内数字 2 的出现次数。注意22则记为 2 次,其它没别的...


 

二:思路、

  • 思想可以考虑动态规划
  • 需要计算在每一位上数字 的出现次数,然后将这些次数相加
  • 对于每一位,我们可以根据该位上的数字是小于、等于还是大于 分别来计算

 

三:符号定义、

  • n:当前考虑的数字
  • i:当前考虑的位(1代表个位,10代表十位,以此类推)
  • div:用于获取当前位的值,例如,如果考虑十位,则div为10
  • h:当前位以上的数字组成的数
  • c:当前位的数字
  • l:当前位以下的数字组成的数

 

四:公式推导、(具体公式建议自行理解)
    1.当前位数字小于2

  • 如果当前位的数字小于 ,那么各位上不可能出现 2
  • 例如,对于数字 1234,考虑百位,百位是2,但如果我们考虑十位(3),则视为上不可能有 2
  • 这种情况下,数字 的出现的次数为 0

    2.当前位数字等于2

  • 如果当前位数字等于 2,那么数字 出现的次数由高位决定,低位可以是任意数字
  • 例如,对于数字 1234,考虑百位,百位是 2,2 可以出现在 1200~1229 之间,共 30 
  • 这种情况下,数字2的出现次数为 h*div + l+1

    3.当前位数字大于2

  • 如果当前位数字大于2,那么数字2可以出现在这个位上的所有可能情况
  • 例如,对于数字1234,考虑千位,千位是1,运行不了(但能运行则2可以出现在2000~2999之间,共1000次)
  • 这种情况下,数字2的出现次数为 (h+1)*div

 

五:综合公式、(c < 2 为 0)

    num = 0;if(c == 2)  num = h*div + l+1;else if(c > 2)  num = (h+1) * div;

 

六:示例运行、

0+135+130+1241   2   3   4(123+1)*1                                            (12+1)*10                                                1*100 + 34+1                                                   0ans = (0) + (1*100 + 34+1) + ((12+1)*10) + ((123+1)*1)= 0 + 135 + 130 + 124= 389

七:Code Ed、

#include <iostream>
#include <algorithm>
#define int long long
using namespace std;inline int CD(int n, int d){int num = 0;int div = 1;int l,c,h = 0;while(n / div != 0){l = n - (n/div)*div;//更新低位c = (n/div) % 10;//当前位数字h = n / (div*10);//更新高位if(c < d){num += h*div;//当前位小于d,不计数,但别忘了加上以前的}else if(c == d){num += h*div + l+1;//当前位等于d,增加 高位*div +低位+1}else{num += (h+1) * div;//当前位大于d,增加 (高位+1) * div}div *= 10;//移到下一位}return num;
}signed main(void){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int l,r;cin >> l >> r;int ans = CD(r, 2)-CD(l-1, 2);cout << ans << "\n";return 0;
}

八:补:至于这道题,为啥发...有个进阶版位运算算法,还搞不懂。暂且整个逐位计算算法,后续补档。(见动态图片)

相关文章:

  • MTU最大传输单位
  • Java 集合体系深度解析面试篇
  • 各类音频放大器电路原理简析
  • Tomcat 日志体系深度解析:从访问日志配置到错误日志分析的全链路指南
  • 首版次软件测试的内容有哪些?首版次软件质量影响因素是什么?
  • 互联网大厂Java求职面试:基于RAG的智能问答系统设计与实现-1
  • 【进化算法】常见单目标进化算法一览
  • 权限控制模型全解析:RBAC、ACL、ABAC 与现代混合方案
  • Spring Boot + MyBatis-Plus 高并发读写分离实战
  • 大白话解释地址线宽度
  • AIOps 工具介绍
  • 智汇云舟亮相第二十七届北京科博会
  • C#里创建一个MaterialDesign3的导航条
  • 云上系统CC攻击如何进行检测与防御?
  • LeetCode 解题思路 47(最长回文子串、最长公共子序列)
  • 2025 SD省集总结
  • 数字化与信息化的关系
  • YOLOv12云端GPU谷歌免费版训练模型
  • C++ —— 可变参数
  • 1995-2022年全球经济自由度指数数据
  • 14岁女生瞒报年龄文身后洗不掉,法院判店铺承担六成责任
  • 98年服装“厂二代”:关税压力下,我仍相信中国供应链|湃客Talk
  • 两部门发布山洪灾害气象预警:北京西部、河北西部等局地山洪可能性较大
  • 上海发布大风黄警:预计未来24小时内将出现8-10级大风
  • 美联储宣布维持基准利率不变
  • 水中托举救出落水孩童后遇难,42岁退役军人高武被确认为见义勇为