zoukankan      html  css  js  c++  java
  • 1的数目问题

    1.题目:

    给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
    要求:
    写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12)  = 5。
    在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少
    思路
    最初看见这个问题我感觉这个有规律的问题 肯定是存在了特殊的数字,包含着规律于是我想找到特殊数字于是我找到13
    N=13  f(N)=2+4=6;  
    N=23 f(N)=3+10=13;  
    package yunsuan;
    
    import org.junit.Test;
    
    public class find1 {
        
        public int Count(int n){
            int count = 0;
            int  n1 = 1;
            int nN = 0;
            int gN = 0;
            int hN = 0;
            if (n <= 0){
                return 0;
            }
            while (n / n1 != 0){
                nN = (n - (n / n1)*n1);
                gN =  ((n / n1) % 10);
                hN =  (n / (n1 * 10));
                if (gN == 0){
                    count += hN*n1;
                }
                else if (gN == 1){
                    count += hN*n1 + nN + 1;
                }
                else
                {
                    count += (hN + 1)*n1;
                }
                n1 *= 10;
            }
            return  count;
        }
    
        @Test
        public void fun(){
          
            int i;
            for (i = 0; i < 2147483647; i++)
            {
                if (Count(i) == i)
                {
                    System.out.println(i);
                }
            }
           
        }
    
    }

    N=33  f(N)=4+10=14;
    .......
    N=93 f(N)=10+10=20
    发现这个规律
    运行截图:
     
     
     
     
  • 相关阅读:
    linux基础
    模块三、企业实战案例
    模块二、shell脚本逻辑结构
    模块一:shell 脚本基础
    三剑客、shell脚本
    定时任务、用户管理、磁盘介绍
    python笔记03
    文件属性、正则表达式、文件权限
    Linux系统目录结构介绍
    Linux基础及入门介绍
  • 原文地址:https://www.cnblogs.com/qerror404/p/4592506.html
Copyright © 2011-2022 走看看