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是多少。
    思路:
     这道题目存在者一些规律:
        f(0)=0;f(1)=1;f(2-9)=1;
        f(10)=1+(0+1)=2;
        f(11)=(1+1)+(1+1)=4;
        f(13)=(1+1)+(3+1)=6;
        f(23)=(2+1)+10=13;
        f(33)=(3+1)+10=14;
        f(93)=(9+1)+10=20;
        f(123)=个位出现的1数+十位出现的1数+百位出现的1数
    当N = abcde时
        以c位为例
        if(c==0)  num=ab*100;
        if(c==1)  num=ab*100+de+1;
        if(c>1)  num=(ab+1)*100
    代码:
    #include <iostream>
    using namespace std;
    int main()
    {
    	int n;
    	cout<<"请输入数字:";
    	cin>>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);
    		if(CurNum==0)		
    			count=count+HigherNum*factor;			
    		if(CurNum==1)
    			count=count+HigherNum*factor + LowerNum +1;
    		if(CurNum>1)
    			count=count+(HigherNum+1)*factor;
    		factor=factor*10;
    	}
    	cout<<"出现数字1的个数为:"<<count<<endl;
    	return 0;
    }
    

      

     

      

    截图:
     
    总结:
     一些题目总存在一些的规律,我们在遇到问题时应多多总结寻找题目中的规律,多列举一些有代表的数从中找到规律在推广到一般,解决问题。
     
  • 相关阅读:
    angularJs项目实战!02:前端的页面分解与组装
    angularJs项目实战!01:模块划分和目录组织
    django admin 导出数据简单示例
    django 学习之model操作(想细化)
    6.11大杂烩。。
    InlineModelAdmin对象的学习
    django-salmonella的使用
    python 保留两位小数
    Django 时间与时区设置问题
    Django学习
  • 原文地址:https://www.cnblogs.com/lingxi/p/4549564.html
Copyright © 2011-2022 走看看