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

2020-04-03 14:14:48 +08:00
 crella
无聊想了个与约瑟夫循环有关的算法问题。希望可以看到优雅的解答。

利益相关:不是作业。

场景 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 的解。
587 次点击
所在节点    问与答
2 条回复
moonlord
2020-04-03 14:50:05 +08:00
还说不是作业!我差点就信了!
wysnylc
2020-04-03 15:18:57 +08:00
就是作业

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/659014

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX