2746:约瑟夫问题

总时间限制: 
1000ms

内存限制: 
65536kB
描述
约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。

输入
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m,n <=300)。最后一行是:

0 0

输出
对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
样例输入
6 2
12 4
8 3
0 0
样例输出
5
1
7
代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
using namespace std; int main()
{
int m,n;
while(true)
{
int i,j;
int count=;
cin>>m>>n;
if(m==&&n==)//m,n同时为0的时候退出
break;
char *str;
if((str=(char *)malloc((m+)*sizeof(char)))==NULL)//判断是否能够分配空间
{
printf("failed!\n");
exit();
}
memset(str,'',(m+)*sizeof(char));//分配空间,赋初值
int last=m,ptr=;//last为计数当前还有多少个没报数的猴子,ptr为移动指针,指向剩下的猴子
while(last>)
{
ptr++;
if(str[ptr]=='')//如果还没报数,则处理
{
count++;
if(count==n)//计数到了出列的数字
{
count=;//重新计数
str[ptr]='';//数组置零
last--;//猴子的数目减少
}
}
if(ptr==m)//指针移动到了最后一个猴子
{
ptr=;
}
}
for(int k=;k<=m;k++)
{
if(str[k]=='')
{
cout<<k<<endl;
break;
}
}
free(str);
str=NULL;
}
return ;
}
#include<iostream>
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
using namespace std;
int main()
{
int m,n;
while(cin>>m>>n)
{
if(m==&&n==)
{
break;
}
char *str;
int last,ptr,count;
if ((str=(char *) calloc (m + , sizeof(char))) == NULL) //这里判断需小心,是数组的长度
{
printf("空间分配失败!\n");
exit(-);
}
memset(str,'',(m+)*sizeof(char));
count=ptr=;
last=m;
while(last>)
{
ptr++;
if(str[ptr]=='')
{
count++; if(count==n)
{
count=;
str[ptr]='';
last--;
}
}
if(ptr==m)
{
ptr=;
}
}
for(ptr=;ptr<=m;ptr++)
{
if(str[ptr]=='')
{
cout<<ptr<<endl;
break;
}
}
free(str);
str=NULL;
}
return ;
}
#include<iostream>
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
using namespace std;
int main()
{
int m,n;
while(cin>>m>>n)
{
if(m==&&n==)
{
break;
}
/*
char *str;
int last,ptr,count;
if ((str=(char *) calloc (m + 1, sizeof(char))) == NULL) //这里判断需小心,是数组的长度
{
printf("空间分配失败!\n");
exit(-1);
}
memset(str,'1',(m+1)*sizeof(char));
count=ptr=0;
last=m;
while(last>1)
{
ptr++;
if(str[ptr]=='1')
{
count++; if(count==n)
{
count=0;
str[ptr]='0';
last--;
}
}
if(ptr==m)
{
ptr=0;
}
}
for(ptr=1;ptr<=m;ptr++)
{
if(str[ptr]=='1')
{
cout<<ptr<<endl;
break;
}
}
free(str);
str=NULL;*/
int s=;
for(int i=;i<=m;i++)
{ s=(s+n)%i;
}
cout<<s+<<endl;
}
return ;
}

2746:约瑟夫问题poj的更多相关文章

  1. POJ 2359 Questions(约瑟夫环——数学解法)

    题目链接: http://poj.org/problem?id=2359 题意描述: 输入一个字符串 按照下面的规则,如果剩下的最后一个字符是'?',输出"Yes",如果剩下的最后 ...

  2. poj 1012 &amp; hdu 1443 Joseph(约瑟夫环变形)

    题目链接: POJ  1012: id=1012">http://poj.org/problem?id=1012 HDU 1443: pid=1443">http:// ...

  3. POJ 1012 Joseph 约瑟夫问题

    http://poj.org/problem?id=1012 早上去图书馆复习苦逼的复习....万恶的数逻.T T我还要自我安慰的说复习完了奖励回来刷水题~ 10点多的时候外面校运会大吼撑杆跳的那个. ...

  4. poj 1012 Joseph (约瑟夫问题)

    Joseph Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 47657   Accepted: 17949 Descript ...

  5. Poj 3517 And Then There Was One(约瑟夫环变形)

    简单说一下约瑟夫环:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个 ...

  6. Joseph POJ - 1012 约瑟夫环递推

    题意:约瑟夫环  初始前k个人后k个人  问m等于多少的时候 后k个先出去 题解:因为前k个位置是不动的,所以只要考虑每次递推后的位置在不在前面k个就行 有递推式 ans[i]=(ans[i-1]+m ...

  7. POJ 2886.Who Gets the Most Candies? -线段树(单点更新、类约瑟夫问题)

    线段树可真有意思呢续集2... 区间成段的替换和增减,以及区间求和等,其中夹杂着一些神奇的操作,数据离散化,简单hash,区间异或,还需要带着脑子来写题. 有的题目对数据的操作并不是直接按照题面意思进 ...

  8. POJ 3517 And Then There Was One( 约瑟夫环模板 )

    链接:传送门 题意:典型约瑟夫环问题 约瑟夫环模板题:n个人( 编号 1-n )在一个圆上,先去掉第m个人,然后从m+1开始报1,报到k的人退出,剩下的人继续从1开始报数,求最后剩的人编号 /**** ...

  9. POJ 2886 Who Gets the Most Candies?(线段树&#183;约瑟夫环)

    题意  n个人顺时针围成一圈玩约瑟夫游戏  每一个人手上有一个数val[i]   開始第k个人出队  若val[k] < 0 下一个出队的为在剩余的人中向右数 -val[k]个人   val[k ...

随机推荐

  1. JavaScript正则表达式之分组匹配 / 反向引用

    语法 元字符:(pattern) 作用:用于反复匹配的分组 属性$1~$9 如果它(们)存在,用于得到对应分组中匹配到的子串 \1或$1 用于匹配第一个分组中的内容 \2或$2 用于匹配第一个分组中的 ...

  2. Linux入门(4)——Ubuntu16.04安装MATLAB2016b

    通常有三个安装文件: Matlab 2016b Linux64 Crack.rar R2016b_glnxa64_dvd1.iso R2016b_glnxa64_dvd2.iso sudo apt i ...

  3. Tirp(状压DP)

    Description 有一个N*N的迷宫,其中有一些宝藏,现在,小A要从入口(1,1)出发,到达出口(N,N),每次,小A只能从当前的格子走到上下左右四个格子,为了不空手而归,小A决定要拿到所以的宝 ...

  4. [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes+prior

    先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...

  5. 关于火狐浏览器在开发调试过程中,出现javascript:void(0)的状态

    关于火狐浏览器在开发调试过程中,出现javascript:void(0)的状态 由于火狐浏览器没有安装 Adobe Flash Player 19 NPAPI这个插件 安装好了之后就可以直接运行了

  6. Eddy's picture(最小生成树)

    Eddy's picture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...

  7. SQL Server 数据类型转换函数

    T-SQL提供了两个显示转换的函数:CAST函数和CONVERT函数. 1. CAST函数 语法: CAST ( expression AS data_type [ ( length ) ] ) 示例 ...

  8. 阿里云centos 搭建SVN

    1. 安装 先进入想安装的目录,执行 yum install subversion 2. 创建SVN目录 mkdir -p /var/svn/svnrepos  ,然后创建版本库 svnadmin c ...

  9. java 冒泡排序与选择排序

    //冒泡排序 package test;public class Maopaosort {   public static void method(){  int[] arr=new int[10]; ...

  10. 雅虎公司C#笔试题及参考答案

    Question 1. (单选) 在计算机网络中,表征数据传输可靠性的指标是——21. 传输率2. 误码率3. 信息容量4. 频带利用率Question 2. (单选) 以下关于链式存储结构的叙述中哪 ...