这是一个创建于 1694 天前的主题,其中的信息可能已经有所发展或是发生改变。
无聊想了个与约瑟夫循环有关的算法问题。希望可以看到优雅的解答。
利益相关:不是作业。
场景 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
|
|
1
moonlord 2020-04-03 14:50:05 +08:00
还说不是作业!我差点就信了!
|
|
|
2
wysnylc 2020-04-03 15:18:57 +08:00
就是作业
|