pku3517约瑟夫环问题

原创 2011年01月20日 09:16:00

【题意】

典型约瑟夫环问题的变种,由杀人变成取石子,石子从1到n编号,先把m取掉(1<=m<=n),然后从m+1开始每k个石子取一个,问最后一个“胜利”的石子;

 

【分析】

这里m号石子先取掉,那么之后的循环不会再有m介入,所以我们只需要计算出剩下n-1个石子的最后胜者就可以。我们从m+1开始编号0,m+2编号1,。。。m-1编号n-2,用下面的Joseph()函数就可以计算出它们的最后胜者,返回结果要加1,因为编号从0开始,而我们题目数据计数从1开始,这样返回的结果是res, (res+m)%n就是答案了,开始wa了,因为如果res+m==n的话,应该输出n而不是0,改后AC,以后记住这个教训;

 

【代码】

 

/*3517 Accepted 356K 16MS G++ 468B 2011-01-20 09:07:53 */
#include<stdio.h>
int Joseph(int n,int m){//n个人,报数m;
    int i=2,a=0,b;
    if(n==1) return 1;
    while(i<=n){
        b= (a+m)%i; //i表示当前人数;
        a=b;
        i++;
    }
    return b+1;
}
int main()
{
    int n,m,k,res,i;
    while(scanf("%d%d%d",&n,&k,&m),(n+k+m)) 
    {
        res=Joseph(n-1,k);
        res= (m+res)%n;
        if(res==0) res=n;
        printf("%d/n",res);
    }
}           

C++经典题目:约瑟夫环问题

问题描述: 有n个人围成一圈,顺序排号。从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。 分析: 首先由用户输入人数n,然后对这n个人进行编号【因为如果不编号的话...
  • QianShouYuZhiBo
  • QianShouYuZhiBo
  • 2013年09月26日 23:48
  • 3001

Java实现约瑟夫环问题

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;...
  • qq_21150865
  • qq_21150865
  • 2017年03月05日 14:48
  • 4331

C语言经典算法100例-069-简单约瑟夫环问题

这里我们实现一个简单的约瑟夫环问题,描述如下: 有N个人站成一圈,从
  • mrbourne
  • mrbourne
  • 2014年05月07日 09:24
  • 1450

C++面向对象方法求解约瑟夫环问题

约瑟夫问题有很多种解法及其变种,这里的约瑟夫环问题是这样的: [b]约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数...
  • u010155023
  • u010155023
  • 2015年02月14日 12:39
  • 1038

约瑟夫环问题

描述了约瑟夫问题的两种解法。一种模拟过程,一种用数学方法推导。
  • KangRoger
  • KangRoger
  • 2014年09月13日 21:11
  • 45420

数据结构:约瑟夫环问题

约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如...
  • HMYANG314
  • HMYANG314
  • 2014年09月23日 12:47
  • 1892

约瑟夫环(数学高效率解法,很详细)

 5.5.4 用数学方法解约瑟夫环(1) 原文copy:http://book.51cto.com/art/201403/433941.htm 5.5.4  用数学方法解约瑟夫环(1...
  • qq_25973267
  • qq_25973267
  • 2015年12月25日 22:49
  • 4646

动态规划解决约瑟夫环问题

题目: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号0,1,2,3…n-1分别表示)围坐在一张圆桌周围。从编号为0的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到...
  • K346K346
  • K346K346
  • 2016年03月28日 10:09
  • 2110

详细阐述约瑟夫环问题(报数出队问题)

约瑟夫环问题(Josephus)       用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。(约瑟夫环问题 Josephus) 直接上代...
  • Double2hao
  • Double2hao
  • 2015年10月05日 16:51
  • 1640

两种方法实现约瑟夫环(链表,顺序表)

//两种方法解决约瑟夫问题:顺序存储结构,循环单链表, //测试数据:a,b,c,d,e,f,g,h,i,j,n=10;从第2个开始,数到5即:s=2,m=5 //结果f,a,g,c,j,i,b,e,...
  • TFLiu666
  • TFLiu666
  • 2017年03月27日 20:58
  • 484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pku3517约瑟夫环问题
举报原因:
原因补充:

(最多只允许输入30个字)