c++ please help me!第1题:【约瑟夫问题】39 个犹太人与约瑟夫躲到山洞,39个犹太人决定宁死也不要被敌人抓到,于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止.然而约瑟夫并不想死,他站在某个位置上,最终逃过了这场死亡游戏.试问:这个位置是哪编号?要求:1.分别采用递归和递推法来编程;2.采用或头文件中的clock()来分析这两种方法的CPU耗时,指出 哪种方法更快,并分析其原因.说明:clock()使用参见“课外资料之三”3.调试递归程序,截屏“调用窗口.
问题描述:
c++ please help me!
第1题:【约瑟夫问题】39 个犹太人与约瑟夫躲到山洞,39个犹太人决定宁死也不要被敌人抓到,于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止.然而约瑟夫并不想死,他站在某个位置上,最终逃过了这场死亡游戏.试问:这个位置是哪编号?要求:
1.分别采用递归和递推法来编程;
2.采用或头文件中的clock()来分析这两种方法的CPU耗时,指出 哪种方法更快,并分析其原因.说明:clock()使用参见“课外资料之三”
3.调试递归程序,截屏“调用窗口.
答
刚才想了一下,递推公式应该是f(i) = (f(i-1) + 2) % i + 1
分别把f(3) = 1 f(3) = 2 带进去算就可以了吧
i表示队列总人数,f(i)表示约瑟夫或朋友站在第几个
递推一定比递归快吧……