zoukankan      html  css  js  c++  java
  • 软件工程课堂训练——有多少个1?

    一、题目要求

        给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。

        要求: 写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。 

    二、设计思路

         列举几个数发现如下规律:

          1、一位数:N=0时,f(N)=0;N>0时,f(N)=1;

          2、两位数:f(13)=2+4=6;   f(23)=3+10=13

          3、三位数:f(113)=12+14+14=40

          ......

         4、 f(abcde),若要计算c位上1的个数,需看ab、c、de的情况。

            当c=0时,受高位影响,百位上出现1的个数为:(ab)*100

            当c=1时,受高位和低位影响,百位上出现1的个数为:(ab)*100+((cde)+1)

        当c>1时,受高位影响,百位上出现1的个数为:((ab)+1)*100
      

    三、程序代码

    // zhao111.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "stdlib.h"
    int CountNum(int n)
    {
        int count=0;
        int factor=1; 
        int LowerNum=0;
        int CurNum=0;
        int HigherNum=0;
        while (n/factor!=0)       
        {
            LowerNum=n-(n/factor)*factor;
            CurNum=(n/factor)%10;
            HigherNum=n/(factor*10);
            switch (CurNum)
            {
            case 0:
                count=count+HigherNum*factor;
                break;
            case 1:
                count=count+HigherNum*factor + LowerNum +1;
                break;
            default:
                count=count+(HigherNum+1)*factor;
                break;
            }
            factor=factor*10;
        }
        return count;
    }
    
    int main()
    {
         int num;
         printf("请输入一个数:");
         scanf("%d",&num);
         printf("%d中出现“1”的个数为:%d
    ",num,CountNum(num));
         return 0;
    }

    四、运行结果

      

    五、心得体会

     这个题老师也点出来重要的是找规律。所以我想分成几种情况考虑。这个数是一位的时候,2位十位是1,2,3,4.....时,三位百位是1,2,3,4.....时。然后又让找abcde的规律。其实找规律的过称特别麻烦。中间有的经常漏掉。这样就走了不少弯路。后来仔细检查后,规律就出来了。有了规律,编程就很简单了。看来好的想法很重要。

  • 相关阅读:
    java wait 与 notify sleep
    java线程安全总结
    ubuntu安装遇到的问题
    python时间处理函数
    js获取当前时间
    sql如何将同个字段不同值打印在一行
    django models数据类型
    django上传图片和文字记录
    django form使用学习记录
    django中request对象详解(转载)
  • 原文地址:https://www.cnblogs.com/123jy/p/4467059.html
Copyright © 2011-2022 走看看