zoukankan      html  css  js  c++  java
  • 课堂练习——找1

    题目要求:

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

         要求:   

          1.写一个函数 f(N) ,返回到 之间出现的“1”的个数。例如 f(12)  = 5

        2.32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

    一、设计思路

      通过列举法,总结函数f(N)规律如下:

      1.一位十进制数:当N>=1,f(N)=1;当N=0时,f(N)= 0;

      2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6;

              f(23)=个位出现1的个数+十位出现1的个数=3+10=13;

              ......

              f(93)=个位出现1的个数+十位出现1的个数=10+10=20;

      3.三位十进制数:f(123)=个位出现1的个数+十位出现1的个数+百位出现1的个数=13+20+24=57;     

      4.f(abcde),计算c位上的1的个数,需要看abcde的情况:

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

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

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

    二、程序代码

        

     1 // 找1.cpp : Defines the entry point for the console application.
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream.h>
     6 #include "stdlib.h"
     7 int count(int n)
     8 {
     9     int count=0; 
    10     int factor=1; 
    11     int LowerNum=0;
    12     int CurNum=0;
    13     int HigherNum=0;
    14     while (n/factor!=0)       
    15     {
    16         LowerNum=n-(n/factor)*factor;
    17         CurNum=(n/factor)%10;
    18         HigherNum=n/(factor*10);
    19         switch (CurNum)
    20         {
    21         case 0:
    22             count=count+HigherNum*factor;
    23             break;
    24         case 1:
    25             count=count+HigherNum*factor + LowerNum +1;
    26             break;
    27         default:
    28             count=count+(HigherNum+1)*factor;
    29             break;
    30         }
    31         factor=factor*10;
    32     }
    33     return count;
    34 }
    35 
    36 int main()
    37 {
    38     int num;
    39     cout<<"请输入数字:
    ";
    40     cin>>num;
    41     cout<<"
    ";
    42     cout<<num<<"出现数字1的个数为:
    ";
    43     cout<<count(num)<<endl;
    44     return 0;
    45 }

    三、运行结果截图

       

        

        

    四、总结与心得

        本次实验的题目是找1的个数,完成时设计思路花费的时间比较长,主要是用于总结规律,对于这种偏于数学应用方面的题目,只要找到规律,那么所有问题都不再困难。这也给我们提示,在我们平时解决问题时,一定要多加思考,这样才能事半功倍。

        

     

  • 相关阅读:
    2011全国大学生电子竞赛我们组的方案——A题开关电源模块并联供电系统(草稿)
    perl 引用实例
    R 批量读取本地文件
    R语言对数据集进行排序
    perl 常用函数和符号
    Linux下设置环境变量
    读取前200行
    R字符串处理
    R graph:如何自定义坐标轴刻度标示(tick label)
    perl中如何调用R语言
  • 原文地址:https://www.cnblogs.com/mudanhuakai/p/4473960.html
Copyright © 2011-2022 走看看