题意:

有k个坏人k个好人坐成一圈,前k个为好人(编号1~k),后k个为坏人(编号k+1~2k)

现在有一个报数m,从编号为1的人开始报数,报到m的人就要自动死去。

问当m为什么值时,可以使得在出现好人死亡之前,k个坏人先全部死掉?

已知:k,n=2*k

求:m

分析:例子 k=3,n=6,m=5

1 2 3 4 5 6

以m=5为一循环长度报到m的编号依次为:5,4,6,2,3,1

就是长为n的数组以m为循环长度进行循环,输出报到m的编号

1 2 3 4 5 6    (黑体为报开始循环1的编号)

1 2 3 4 6

1 2 3 6

1 2 3

1 3

1

符合以下规律公式:ans[i]=(ans[i-1]+m-1)%(n-i+1)+1;  //ans[0]=0

注明:ans[i]中的i是指第i次报到m,其值ans[i]是指第i次报到m的编号

该规律公式法代码:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int k;
  6. int jos[]={};
  7. while(cin>>k&&k!=)
  8. {
  9.  
  10. if(jos[k]!=)
  11. cout<<jos[k]<<endl;
  12. else
  13. {
  14. int n=*k;
  15. int m=k+;//如果m<=k,那么第一次杀的一定是好人
  16. int ans[];
  17. ans[]=;
  18. for(int i=;i<=k;i++)//循环需要杀坏人的次数
  19. {
  20. ans[i]=(ans[i-]+m-)%(n-i+);
  21. if(ans[i]<k)
  22. {
  23. i=,m++;
  24. }
  25. }
  26. jos[k]=m;
  27. cout<<jos[k]<<endl;
  28. }
  29. }
  30. }

另一种方法:

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. bool result(int k,int m) //检测m是否符合
  5. {
  6. int mod=;
  7. int n=*k;
  8. for(int i=;i<k;i++)
  9. {
  10. mod=(mod+m-)%(n-i);//n-i是圈子余下的人数,以这个为实际圈子长度
  11. //m是循环长度 m-1是因为都是从0开始的 mod是上一个数的位置
  12. if(mod<k)
  13. return false;
  14. }
  15. return true;
  16. }
  17.  
  18. int main()
  19. {
  20. int k;
  21. int data[]={};
  22. while(cin>>k&&k!=)
  23. {
  24. if(data[k]!=)
  25. cout<<data[k]<<endl;
  26. else
  27. {
  28. int m=k+;
  29. while(result(k,m)==)
  30. {
  31. m++;
  32. }
  33. data[k]=m;
  34. cout<<m<<endl;
  35. }
  36. }
  37. return ;
  38. }

约瑟夫环问题poj1012的更多相关文章

  1. C#实现约瑟夫环问题

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace orde ...

  2. C语言数组实现约瑟夫环问题,以及对其进行时间复杂度分析

    尝试表达 本人试着去表达约瑟夫环问题:一群人围成一个圈,作这样的一个游戏,选定一个人作起点以及数数的方向,这个人先数1,到下一个人数2,直到数到游戏规则约定那个数的人,比如是3,数到3的那个人就离开这 ...

  3. C语言链表实现约瑟夫环问题

    需求表达:略 分析: 实现: #include<stdio.h> #include<stdlib.h> typedef struct node { int payload ; ...

  4. javascript中使用循环链表实现约瑟夫环问题

    1.问题 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围.犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案.他们围成一个圈,从一个人开始,数到第 ...

  5. tc 147 2 PeopleCircle(再见约瑟夫环)

    SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged ...

  6. HDU 3089 (快速约瑟夫环)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3089 题目大意:一共n人.从1号开始,每k个人T掉.问最后的人.n超大. 解题思路: 除去超大的n之 ...

  7. 约瑟夫环(Josehpuse)的模拟

    约瑟夫环问题: 0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字. 这里给出以下几种解法, 1.用队列模拟 每次将前m-1个元 ...

  8. C++ 约瑟夫环问题

    约瑟夫环比较经典了 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直 ...

  9. 约瑟夫环的java解决

    总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需 ...

随机推荐

  1. 基于IFC的大型三维城市群体——智慧城市模拟

  2. jetty启动常用命令

    1. 启动Jetty Server:运行命令:Java -jar start.jar    指定项目名称启动:   java -jar start.jar -Dname=zoush 保持jetty后台 ...

  3. Elasticsearch - glossary

    From http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/glossary.html glossary of ...

  4. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-005Table per subclass with joins(@Inheritance(strategy = InheritanceType.JOINED)、@PrimaryKeyJoinColumn、)

    一.结构 The fourth option is to represent inheritance relationships as SQL foreign key associations. Ev ...

  5. SPOJ GSS7 - Can you answer these queries VII

    板的不能再板,链剖+线段树或者是LCT随便维护. 感觉唯一要注意的是跳链的时候要对$x$向上跳和$y$向上跳的情况分开讨论,而不能直接$swap$,因为只有两段接触的端点才能相互合并,而且每一次向上跳 ...

  6. Luogu 3402 可持久化并查集

    点开这题纯属无聊……不过既然写掉了,那就丢一个模板好了 不得不说,可持久化并查集实现真的很暴力,就是把并查集的数组弄一个主席树可持久化. 有一点要注意的是不能写路径压缩,这样跳版本的时候会错,所以弄一 ...

  7. js的学习

    对于 ff的 relatedTarget    及IE的toElement  fromElement DOM通过event对象的relatedTarget属性提供了相关元素的信息.这个属性只对于mou ...

  8. 没事写写css

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  9. Entity Framework Code-First(22):Code-based Migration

    Code-based Migration: Code-based migration is useful when you want more control on the migration, i. ...

  10. boost::python开发环境搭建

    本来想用mingw编译boost::python模块,网上看了下资料太少,只有使用vs2012 操作环境:win7 x64 python: x86 boost: 1.57 编译boost::pytho ...