#p508. 善良的约瑟夫
善良的约瑟夫
Description
你一定听说过约瑟夫问题。它的结果是找出了 N 个人中唯一的幸存者。现在 你要参与一个新的游戏,它的结果比原先那个游戏更令人满意。
假设 N 个游戏者站成一个圈。从编号为 1 的游戏者开始每隔一个人暂时性地 去掉一个人(比如一开始去掉的是 2 号)直到最后还剩一个人。当幸存者产生后 所有比他编号高的游戏者将从约瑟夫那里获得 1 孟加拉币,他们也将永久地离开 游戏。对于剩下的游戏者也将进行同样的操作。当某一次操作以后没有人退出游 戏,那么游戏中还剩下的人将获得 2 孟加拉币并且游戏结束。你的任务就是查明 约瑟夫最终一共要付给游戏者多少钱?
比如,共有 5 人参加游戏,第一轮的幸存者是 3 号,所以 4 号和 5 号游戏者 将获得 1 孟加拉币并离开游戏。再下一轮中幸存者仍然是 3 号,因此没有人应该 离开,所以剩下的每个人将获得 2 孟加拉币并且游戏结束。所以约瑟夫一共要付 (2 + 2 x 3 =)8 孟加拉币。
Format
Input
每一个测试数据的输入占一行,是一个不超过 32,767 的整数。文件结束的 同时输入结束。
Output
每一个测试数据的输出占一行,是一个不超过 65,535 的整数,代表约瑟夫 共要付出的钱数。
Samples
5
10
7
8
13
14
统计
相关
在以下作业中: