据说在罗马时期 犹太士兵被古罗马士兵包围 于是他们决定集体自杀
自杀的方式是所有的士兵围成一个圆,每个士兵轮流杀掉左边的那个士兵,一直杀到还剩一个,剩下的那个士兵自杀。
其中有一个士兵叫做约瑟夫,其实他想投降,但是他又不敢明说,所以他想成为最后一名士兵,那么他应该站在哪里?
目录:
- 细节讲解
- 暴力思路(懒得写......)
- 简易c++思路+解法
1.细节讲解
所有n个士兵围成一圈,我们将其序号标为1~n,首先我们可以知道(每轮)偶数号必死,将死的剔除,重新编号(这只是思路),偶数号的又必死。而且我们可以发现,如果人数n位2的次方,那么1号肯定是最后剩下的那个人。
2.暴力思路
从1号开始往后循环,且移动方式为k=(k+移动人数)%n,这是为了防止下标越界,用a数组来存编号,初始化就为0,如果第k个被杀,就标为-1。应该循环到只有一个不为-1