码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 1049 Counting Ones 甲级 xp_xht123


    The task is simple: given any positive integer N, you are supposed to count the total number of 1's in the decimal form of the integers from 1 to N. For example, given N being 12, there are five 1's in 1, 10, 11, and 12.

    Input Specification:

    Each input file contains one test case which gives the positive N (≤230).

    Output Specification:

    For each test case, print the number of 1's in one line.

    Sample Input:

    12
    

    Sample Output:

    5

    解题思路:

    首先,可以想到的一定是暴力的手段,对于每一个数截取出每一位的数字,统计1的个数,如果这样写的话4 和 6测试点会过不了,因为n的范围最大可以到max_int,因此这样的作法并不是最终解法。

     因此,需要寻找结果和给定的n之间的关系

    如果一个数是abcdefg

    if d == 0 
    abc可以的取值是000~(abc - 1)
    efg可以的取值000~999
    总共方案数 abc * 10^3

    if d == 1
        if abc在000~(abc - 1)
        总方案数abc * 10^3
        if abc取abc
        总方案数efg + 1
        综上 abc * 10^3 + efg + 1
        
    if d > 1
    方案数(abc + 1) * 10^3

    综上所述

    错误代码

    1. #include
    2. #include
    3. using namespace std;
    4. int n;
    5. int main()
    6. {
    7. cin >> n;
    8. int res = 0;
    9. for(int i = 1;i <= n;i ++)
    10. {
    11. int j = i;
    12. while(j)
    13. {
    14. if(j % 10 == 1) res ++;
    15. j /= 10;
    16. }
    17. }
    18. cout << res;
    19. }

     正确代码

    1. #include
    2. #include
    3. using namespace std;
    4. int n;
    5. int cal()
    6. {
    7. vector<int>v;
    8. while(n) v.push_back(n % 10) , n /= 10;
    9. int res = 0;
    10. for(int i = v.size() - 1;i >= 0;i --)
    11. {
    12. int x = v[i];
    13. int right = 0 , left = 0 , pow = 1;
    14. //计算左边 (efg)
    15. for(int j = v.size() - 1;j > i;j --) left = left * 10 + v[j];
    16. //计算右边 (abc)
    17. for(int j = i - 1;j >= 0;j --)
    18. {
    19. right = right * 10 + v[j];
    20. pow *= 10;
    21. }
    22. if(x == 0) res += left * pow;
    23. else if(x == 1) res += left * pow + right + 1;
    24. else res += (left + 1) * pow;
    25. }
    26. return res;
    27. }
    28. int main()
    29. {
    30. cin >> n;
    31. cout << cal() << endl;
    32. return 0;
    33. }

  • 相关阅读:
    Tkinter学习笔记(一):完成文件选择和保存对话框
    【Linux基础】3.1任务调度
    java毕业生设计资源循环利用计算机源码+系统+mysql+调试部署+lw
    民安智库(专业市场调查公司)开展老人体检消费者调查
    机器学习笔记 - CRAFT(文本检测的字符区域感知)论文解读
    Unity Text文字超过长度显示为省略号
    mysql 创建函数
    基于复杂环境下的雷达目标检测技术(Matlab代码实现)
    CentOS即将停服,国产化系统替代参考
    实例分享:低投资也可实现的企业信息化综合运维管理
  • 原文地址:https://blog.csdn.net/xp_xht123/article/details/126531274
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号