题意:

有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的编号

该规律公式法代码:

#include<iostream>
using namespace std;
int main()
{
int k;
int jos[]={};
while(cin>>k&&k!=)
{ if(jos[k]!=)
cout<<jos[k]<<endl;
else
{
int n=*k;
int m=k+;//如果m<=k,那么第一次杀的一定是好人
int ans[];
ans[]=;
for(int i=;i<=k;i++)//循环需要杀坏人的次数
{
ans[i]=(ans[i-]+m-)%(n-i+);
if(ans[i]<k)
{
i=,m++;
}
}
jos[k]=m;
cout<<jos[k]<<endl;
}
}
}

另一种方法:

#include<iostream>
using namespace std; bool result(int k,int m) //检测m是否符合
{
int mod=;
int n=*k;
for(int i=;i<k;i++)
{
mod=(mod+m-)%(n-i);//n-i是圈子余下的人数,以这个为实际圈子长度
//m是循环长度 m-1是因为都是从0开始的 mod是上一个数的位置
if(mod<k)
return false;
}
return true;
} int main()
{
int k;
int data[]={};
while(cin>>k&&k!=)
{
if(data[k]!=)
cout<<data[k]<<endl;
else
{
int m=k+;
while(result(k,m)==)
{
m++;
}
data[k]=m;
cout<<m<<endl;
}
}
return ;
}

约瑟夫环问题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. Spring第五天

    1. [简答题]:简述一下hibernate和spring框架的整合步骤: 答: 1.加入hibernate jar包 2.编写持久化类 3.添加Hibernate的配置文件:hibernate.cf ...

  2. Libcurl 简明使用指南

    http://blog.csdn.net/weiling_shen/article/details/7620397 我们的程序中使用的是人家的Easy.h头文件.....完成文件的上传和下传. 尤其是 ...

  3. setTimeout()和setInterval() 何时被调用执行(非多线程).RP

    定义 setTimeout()和setInterval()经常被用来处理延时和定时任务.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则可以在每隔 ...

  4. 在windows远程提交任务给Hadoop集群(Hadoop 2.6)

    我使用3台Centos虚拟机搭建了一个Hadoop2.6的集群.希望在windows7上面使用IDEA开发mapreduce程序,然后提交的远程的Hadoop集群上执行.经过不懈的google终于搞定 ...

  5. 对 BFC 的理解

    对CSS有了解的道友们肯定都知道盒式模型这个概念,对一个元素设置CSS,首先需要知道这个元素是block还是inline类型.而BFC就是用来格式化块级盒子,同样管理inline类型的盒子还有IFC, ...

  6. 数据结构 lucky_ming幸运的小明

    问题描述 在快速排序过程中, 每次会找一个划分值, 将小于划分值的放到其左边, 大于划分值的放右边, 然后再依次递归左右两边, 对子序列进行同样的操作, 直到子序列为空则停止操作.最后就得到了有序的序 ...

  7. C#检测系统是否激活[转自StackOverFlow]

    using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...

  8. AISing Programming Contest 2019C(DFS,BFS)

    #include<bits/stdc++.h>using namespace std;int n,m;long long a=0,b=0,ans=0;char s[407][407];in ...

  9. 33 个 2017 年必须了解的 iOS/swift 开源库第三方库

    本文翻译自Medium,原作者为 Paweł Białecki&lt;img src="https://pic3.zhimg.com/v2-c786777447261347b0d97 ...

  10. P3943 星空 区间异或差分

    \(\color{#0066ff}{ 题目描述 }\) 逃不掉的那一天还是来了,小 F 看着夜空发呆. 天上空荡荡的,没有一颗星星--大概是因为天上吹不散的乌云吧. 心里吹不散的乌云,就让它在那里吧, ...