V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
andybest
V2EX  ›  问与答

算法题,计算 0000 至 9999 中,不是零开头且不含 4 的总共有多少个数字?

  •  
  •   andybest · 2015-03-06 13:57:21 +08:00 · 4823 次点击
    这是一个创建于 3580 天前的主题,其中的信息可能已经有所发展或是发生改变。
    转为字串判断是否有点 low ?如何优雅的写出算法?
    40 条回复    2015-03-07 12:45:21 +08:00
    xjx0524
        1
    xjx0524  
       2015-03-06 13:59:45 +08:00   ❤️ 10
    8*9*9*9=5832
    9hills
        2
    9hills  
       2015-03-06 14:01:21 +08:00
    LS还能不能好好玩耍了。。
    andybest
        3
    andybest  
    OP
       2015-03-06 14:02:15 +08:00
    @xjx0524 赞,结果正确,但这算法怎么理解呢
    rrfeng
        4
    rrfeng  
       2015-03-06 14:03:32 +08:00
    不是一个 4 位置的排列组合题吗……
    warlock
        5
    warlock  
       2015-03-06 14:06:28 +08:00
    好像高中时候的数学考试题
    miao
        6
    miao  
       2015-03-06 14:14:19 +08:00   ❤️ 2
    @andybest
    从0000到9999, 一共4位数字, 每一位出现的字符是0到9等十个符号.
    首位不含9,0两个符号, 则首位出现的符号八个
    余下第二位第三位第四位不含0,则余下每位出现的符号是九个
    算下来就是8*9*9*9=5832
    andybest
        7
    andybest  
    OP
       2015-03-06 14:15:11 +08:00
    @miao 原来如此,高手啊!!!服了!
    NewYear
        8
    NewYear  
       2015-03-06 14:17:02 +08:00   ❤️ 1
    @miao 你没发出来的时候我想了想,应该就是10进制变9进制,第一位因为不会形成10,所以多减一个1

    然后就说刷新看看是不是有人回答了……哎
    happywowwow
        9
    happywowwow  
       2015-03-06 14:17:43 +08:00   ❤️ 1
    第一位可选1-3 5-9
    第二、三、四位可选0-3 5-9
    8*9*9*9
    LZ的方法是太low了。。。
    NewYear
        10
    NewYear  
       2015-03-06 14:18:21 +08:00   ❤️ 1
    @miao 另外楼主说的是不含4,不是不含9,嘿嘿,所以你的解答错误错误错误!
    miao
        11
    miao  
       2015-03-06 14:23:58 +08:00
    @NewYear 不好意思, 打错, 首位是不含4和0.其他应该是没错的
    BGLL
        12
    BGLL  
       2015-03-06 15:21:35 +08:00
    0000 至 9999 10000个数中不含某一位:

    10*(1-((8/9)*(9/10)^0))=1
    90*(1-((8/9)*(9/10)^1))=18
    900*(1-((8/9)*(9/10)^2))=252
    9000*(1-((8/9)*(9/10)^3))=3168

    1+18+252+3168=3439

    10000-3439=6561
    finian
        13
    finian  
       2015-03-06 15:55:35 +08:00
    排列组合问题。。。楼主是想知道非0开不含4的4数域名有多少个吧?
    BGLL
        14
    BGLL  
       2015-03-06 15:57:41 +08:00
    简化一下
    BGLL
        15
    BGLL  
       2015-03-06 16:02:54 +08:00
    简化一下
    M位连续数字中,某非0数字出现次数N
    N = 9 * 10^(M-1) - 8 * 9 ^(M -1)

    M N
    1 1 (0~9中)
    2 18 (10~99中)
    3 252 (100~999中)
    4 3168 (1000~9999中)
    5 37512
    6 427608
    7 4748472
    8 51736248
    9 555626232
    10 5900636088
    ................


    算数字有几位M,再把0~M对应的N加起来....
    wzxjohn
        16
    wzxjohn  
       2015-03-06 16:04:18 +08:00
    现在已经连这都叫算法题了么。。。初中数学啊。。。。。。。。。
    raincious
        17
    raincious  
       2015-03-06 16:07:40 +08:00   ❤️ 2
    @wzxjohn

    function countNums()
    {
    return 5832;
    }

    希望你满意 :D
    subpo
        18
    subpo  
       2015-03-06 17:50:47 +08:00
    排列组合已经不太记得了。。
    IgniteWhite
        19
    IgniteWhite  
       2015-03-06 17:58:31 +08:00   ❤️ 1
    我一直以为这里都起码是大学生。。。
    gladuo
        20
    gladuo  
       2015-03-06 17:59:26 +08:00
    @BGLL LZ不是0开头我的理解应该是必须是四位数。。。
    就是1000 ~ 9999中不含4有多少。。。
    gladuo
        21
    gladuo  
       2015-03-06 18:00:07 +08:00
    我觉得 LZ 做的是编码?密码?
    BGLL
        22
    BGLL  
       2015-03-06 18:18:47 +08:00
    @gladuo 不是0开头就是0、1、2、3~9999这样吧,又不是必须要4位数...
    Death
        23
    Death  
       2015-03-06 19:11:14 +08:00 via Android
    -_-||高中数学的排列组合题
    FrankFang128
        24
    FrankFang128  
       2015-03-06 19:17:18 +08:00 via Android   ❤️ 2
    楼主秀智商
    roychan
        25
    roychan  
       2015-03-06 19:38:03 +08:00
    num = 0
    for i in 1000..9999
    for j in 0..3
    if i.to_s[j].to_i == 4
    num += 1
    break
    end
    end
    end

    puts (9000 - num)

    吼不吼呀
    roychan
        26
    roychan  
       2015-03-06 19:38:25 +08:00
    缩进呢…
    msg7086
        27
    msg7086  
       2015-03-06 19:39:44 +08:00
    @BGLL 0就是0开头的。
    crab
        28
    crab  
       2015-03-06 19:49:29 +08:00
    @IgniteWhite 大学生都会解答出这个?
    IgniteWhite
        29
    IgniteWhite  
       2015-03-06 20:17:02 +08:00
    @crab 这样问的话当然不一定啦。概统我已经忘光了
    wzxjohn
        30
    wzxjohn  
       2015-03-06 21:00:06 +08:00
    @raincious 没缩进没指明返回值差评。。。
    BGLL
        31
    BGLL  
       2015-03-06 21:13:34 +08:00
    @msg7086 呃,那就减一个,6560……
    JkCola
        32
    JkCola  
       2015-03-06 21:41:27 +08:00
    我就想问一下,0001是不是应该写成1?
    10iii
        33
    10iii  
       2015-03-06 22:19:43 +08:00
    这个也能叫算法题?小学数学题的难度啊,一共10000个,0/4开头的2000个,余8000个,
    其中百位是4的,去掉8000里面十分之一,余7200
    其中十位是4的,去掉7200十分之一,余6480
    其中各位是4的,去掉6480十分之一,余5832
    fractal314
        34
    fractal314  
       2015-03-07 00:12:26 +08:00 via Android
    9进制吧
    ligyxy
        35
    ligyxy  
       2015-03-07 00:24:34 +08:00
    zhttty
        36
    zhttty  
       2015-03-07 01:25:51 +08:00 via Android
    @IgniteWhite 我一直以为这里起码是小学生,三年级奥数就有这题了!
    momo5269
        37
    momo5269  
       2015-03-07 01:38:12 +08:00
    @zhttty 类似的我初中才见到 = =
    cnkuner
        38
    cnkuner  
       2015-03-07 10:30:12 +08:00 via Android
    @miao 应该是首位不含0/4两个。不是0 9吧
    zhengkai
        39
    zhengkai  
       2015-03-07 12:23:43 +08:00
    想起很久以前,去 CSDN,看到我一朋友总去“算法”板块,我也就去泡了一段时间

    后来发现,平均每页有三个问题,是在问 13 个球里有个球重量有问题,最少称几次能找出来,而这道题,是《离散数学》课本的第一道例题
    Fedor
        40
    Fedor  
       2015-03-07 12:45:21 +08:00
    初中生?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5760 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:33 · PVG 14:33 · LAX 22:33 · JFK 01:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.