• “找一”分析报告


    一、题目要求

    n给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
    n要求:
    n写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12)  = 5。
    n在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
     

    二、设计思路

            设计思路比较简单,即把从1到输入的这个数之间,所有的数都拆分开,拆分成百位数,十位数,个位数等。之后如果出现1,就在计数的树中加一个1。

    三、源代码

    #include<iostream>
    using namespace std;
    
    void main()
    {
        int i,n,j=1,m;
        
        cout<<"请输入n:"<<endl;
        cin>>n;
    
        int n1;
    
        for(i=2;i<=n;i++)
        {
            n1=i;
            while(n1!=0)
            {
                m=n1%10;
                 if(m==1)
                { 
                    j++;
                }
                n1=n1/10;
            }
        }
        cout<<j<<endl;
    }

    四、结果截图

    五、实验总结

           其实这次的问题可以用枚举法找规律来解决,我这个方法虽然简单好想,但是这并不是最好的解决方法。今天这个问题,可以用这个方法解决,但是如果有一天,碰到不能用这个解决的问题呢?所以以后不应该老是这一种定性思维,应该多找一些规律从中找出解决方法。

  • 相关阅读:
    [转]人生哲理小故事
    取PE文件OriginalFilename解析VERSION资源
    [转]COM对象创建外部机制
    读书的几个步骤
    zoj 2412 Farm Irrigation
    HDU 1575 Tr A
    toj 2843 Diamonds
    HDU 1856 More is better
    toj 2841 Bitwise Reverse
    hdu 1213 How Many Tables
  • 原文地址:https://www.cnblogs.com/meimiaozi/p/4551462.html
Copyright © 2020-2023  润新知