zoukankan      html  css  js  c++  java
  • 数“1”游戏

    一、实验题目

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

         要求:

        1、写一个函数F(N),返回1~N之间出现“1”的个数,例如:F(12)=5;

        2、在32位整数范围内,满足条件的“F(N)=n”的最大的N是多少;

    二、设计思路

      规律:

         每一位上都只有三种情况:0,1,2-9

         第 i 位(个位算作第0位,十位算作第1位。。。。。):

         0:   Num/(10^(i+1))*(10^i)

         1:     Num/(10^(i+1))*(10^i)+Num%(10^i)+1;

         2-9:  (Num/(10^(i+1))+1)*(10^i)

    三、核心源代码

     1 #include<iostream.h> 
     2 #include<math.h> 
     3 
     4 int shu1(int num)
     5 { 
     6     int flog=1;//标记计数1的位数(1为个位,10为十位) 
     7     int now=0;//当前位数
     8     int low=0;//较低位数 
     9     int high=0;//较高位数 
    10     int count=0; 
    11     
    12     while(num/flog!=0)     
    13     {
    14         now=(num/flog)%10; 
    15         low=num-(num/flog*flog); 
    16         high=num/(flog*10); 
    17         if(num<=0) 
    18             return 0; 
    19         if(0==now)//当前数字为0时计数 
    20         {
    21             count+=high*flog;    
    22         }
    23         else if(1==now)//当前数字为1时计数     
    24         {
    25             count+=high*flog+low+1;    
    26         }
    27         else    
    28         {    
    29             count+=(high+1)*flog;    
    30         }
    31         flog=flog*10;//数字左移一位    
    32     }
    33     return count;    
    34 }
    35 void main()
    36 {
    37     int num;
    38     int max=0;
    39     cout<<"请输入要测试的数值:";
    40     cin>>num;
    41     cout<<"出现“1”的个数为:"<<shu1(num)<<endl;    
    42 }

    四、程序截图:

    五、实验总结

      在本次试验中,最主要的还是找到数“1”游戏中的规律,找到规律之后,代码程序也就豁然开朗了。

  • 相关阅读:
    【Java】:判断数据类型
    【Shell编程】:多命令处理
    正则表达式
    26、DIEN(DIN的延伸)
    25、深层用户兴趣网络DIN(阿里)
    强化学习(7)---动态规划
    强化学习(6)---马尔可夫过程
    ubuntu出现终端和浏览器输入法不能显示中文,但是ubuntu software可以显示(fcitx)
    ASP.NET实现企业微信接入应用实现身份认证
    DevOps
  • 原文地址:https://www.cnblogs.com/cainiao1hao/p/4569678.html
Copyright © 2011-2022 走看看