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

求几个与约瑟夫循环有关算法问题的优雅解法

  •  
  •   crella · 2020-04-03 14:14:48 +08:00 via Android · 584 次点击
    这是一个创建于 1497 天前的主题,其中的信息可能已经有所发展或是发生改变。
    无聊想了个与约瑟夫循环有关的算法问题。希望可以看到优雅的解答。

    利益相关:不是作业。

    场景 1


    编程语言列表 T 的元素依次是 php java py go c# js c++ rust 。

    第 1 个程序员说 php 才是最好的语言。
    第 2 个程序员说 c++才是最好的语言。
    ……
    第 n 个程序员会把语言列表 T 去除第 n-1 个程序员喜欢的语言后得到的新列表 N,设第 n-2 个程序员喜欢的语言在 T 里的索引值为 i,设新列表 N 的索引可以首尾循环,从 i 开每隔 2 个位置去掉一个元素,得到列表 N 里的最后一个元素就是他认为的最好的语言。



    比如第 3 个程序员,他的 N 表是 php java py go c# js rust 然后从 php 开始每隔 2 个位置去掉一个元素后的 N 表依次是这样的:
    php java py c# js rust
    php java c# js
    php java js
    php js
    php
    ,于是第 3 个程序员认为最好的语言是 php 。

    假设:只能修改第 1 个和第 2 个程序员认为最好的语言。
    规定:前两个发言的语言不能重复



    问题一:已知第一个程序员支持 php,求第二个程序员支持的语言,使得当支持‘’php 是最好的语言‘’的次数达到 10000 次时,所需要的程序员的人数取得最大值。

    问题二:求当支持‘’php 是最好的语言‘’的次数达到 10000 次时,所需要的最少的程序员的人数,以及第 1 个和第 2 个最好的语言。

    问题三:假设第 n 个程序员支持 c++时,语言列表 T 里面 c++与第(n-1)个程序员支持的语言的位置会互换,而且这个改变会影响后续对表 T 的读取;其他规则不变。

    在此条件下,求问题 2 的解。
    2 条回复    2020-04-03 15:18:57 +08:00
    moonlord
        1
    moonlord  
       2020-04-03 14:50:05 +08:00
    还说不是作业!我差点就信了!
    wysnylc
        2
    wysnylc  
       2020-04-03 15:18:57 +08:00
    就是作业
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5553 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:07 · PVG 16:07 · LAX 01:07 · JFK 04:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.