约瑟夫问题

今天看了一下约瑟夫问题,嗯,感觉自己智商欠费:( 还是来总结下好啦~

问题

约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀死所有人。
于是约瑟夫建议:每次由其他两人一起杀死一个人,而被杀的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在杀了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。

我们这个规则是这么定的:
在一间房间总共有n个人(下标0~n-1),只能有最后一个人活命。

按照如下规则去杀人:
所有人围成一圈
顺时针报数,每次报到q的人将被杀掉
被杀掉的人将从房间内被移走
然后从被杀掉的下一个人重新报数,继续报q,再清除,直到剩余一人

输入

人的个数 : n
每次报到q 就会被杀死 的 q

输出

最终能够活下来的人的下标

相关解析

1、https://blog.csdn.net/tingyun_say/article/details/52343897
2、http://www.cnblogs.com/kkrisen/p/3569281.html#undefined

分析

第一次报数杀掉的是下标为(q-1)人
q       0
q+1     1
:       :
:        :
n-1     n-q-1
0      n-q
1      n-q+1
:        :
:        :
q-2     n-2

由上述可见,杀掉一个人后,重新组成了一个约瑟夫环,重新组成的约瑟夫环的下标和之前的下标关系为 f(n)=(f(n-1)+q)%n。当最后只剩下一个人的时候,它的下标为0,我们可由上述的递推关系得到只剩下两个人时它的下标,然后再推得只剩下3个人时它的下标,一直推到最后有n个人时,它的下标,就得到了最终的结果。请注意,这样的解法所得到的坐标是从以0--(n-1)为基准的,如果想获得以1--n为基准下的,直接将所得的结果加1就好了,很直观的解释就是将下标值加1。
另一个解释:
f(1, 1) = 1;
f(n, k) = (f(n-1, k) + k - 1)%n + 1;

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int n, q;
    cin >> n >> q;
    if (n == 0)
        return 0;
    int result = 0;
    for (int i = 2; i <= n; i++)
        result = (result + q ) % i;
    
    return result+1;
}

变型问题

poj上有个变型问题,题目链接:http://poj.org/problem?id=3517,这个题与经典约瑟夫问题的区别是,它要求第一个杀死的人下标为m,并且下标从1开始。对于这个问题的求解,我们可以按照原来方法去做,得到结果后再去移动下标。在原来的问题中,第一个杀死的人下标为q,我们想办法移动下标使得第一个杀死的人由q变为m,假如n=5,q=2,m=4, 那么原始序列为
1, 2, 3,4,5
如果使得第一次杀死的人为m, 那么序列应为
3 , 4 , 5 ,1 , 2
那么由上面的如何得到下面的结果
f(下)= (f(上)+m-q)%n

// yuesefu.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int n, q, m;
    cin >> n >> q>> m;
    if (n == 0)
        return 0;
    int mid = 0;
    for (int i = 2; i <= n; i++)
        mid = (mid + q ) % i;
    int result = 0;
    result = (mid + 1 + m - q) % n;
    if (result < 0) result = result + n;
    return result;
}

留个坑

1、打印每次淘汰的人
https://blog.csdn.net/coder_pig/article/details/50268099
2、如何用python实现?

index, step = 0, 3    
while len(a) > 1:
    index = (index + step - 1) % len(a)    
    print('kill No.', a[index])
    del a[index]
print('\nWinner is', a[0])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容

  • 本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本...
    kyson老师阅读 1,477评论 0 49
  • 问题来源 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephu...
    AceKitty阅读 857评论 1 5
  • 贴一篇博客,写的还行经典约瑟夫问题的快速求解除了循环链表模拟,和动态规划求解还可以利用树状数组,树状数组的时间复杂...
    陌路晨曦阅读 636评论 0 0
  • 题目地址:http://poj.org/problem?id=1012 问题描述:约瑟夫问题是这样一个问题,N个人...
    其中一个cc阅读 728评论 0 0
  • 针对昨天说的三无去旅游场景:不知去哪里、不知什么时候去、更重要的没什么钱 天巡旅行是这么解决的: 1. 点击首页的...
    晓洁Fanny阅读 362评论 6 2