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. Python并发编程__多进程

    Python并发编程_多进程 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大 ...

  2. UVa12325, Zombie's Treasure Chest

    反正书上讲的把我搞得晕头转向的,本来就困,越敲越晕...... 转网上一个大神写的吧,他分析的很好(个人感觉比书上的清楚多了) 转:http://blog.csdn.net/u010536683/ar ...

  3. mysql5.7在windows不能启动的方法及查看数据库大小命令

    1.将mysql目录下的my-default.ini改为my.ini 2.cmd进入mysql的bin目录下 3.执行mysqld --initialize进行初始化(如果mysql目录下已经存在da ...

  4. EF异常探究(An entity object cannot be referenced by multiple instances of IEntityChangeTracker.)

    今天在改造以前旧项目时出现了一项BUG,是由于以前不规范的EF写法所导致.异常信息如下: "An entity object cannot be referenced by multiple ...

  5. celery rabbit mq 详解

    Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, ...

  6. CodeForces - 556A Case of the Zeros and Ones

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  7. 最长上升子序列(logN算法)

    例如:1 7 3 5 9 4 8 一个序列,比如说a[]={1,7,3,5,9,4,8},找出它的最长上升子序列的个数,很明显是4个,可以是{1,3,5,9},{1,3,5,8}或者{1,3,4,8} ...

  8. 网络基础四 DNS DHCP 路由 FTP

    第1章 网络基础 1.1 IP地址分类 IP地址的类别-按IP地址数值范围划分 IP地址的类别-按IP地址用途分类 IP地址的类别-按网络通信方式划分 1.2 局域网上网原理过程 DHCP原理过程详情 ...

  9. easyui dialog 中嵌入html页面

    最近使用easyui比较多,这个插件确实很好用.在使用时也遇到了大大小小的问题,好在都一一解决了. 记录一下今天遇到的问题. 目的:用easyui的dialog嵌入一个html页面(html中仍有要执 ...

  10. 行内脚本的位置放置----css阻塞行内脚本

    行内脚本:避免放置在css和其他资源之间. 若在head中,最好放在css样式表之前,如果放置在样式表之后,会引起css阻塞. css阻塞:由于浏览器要保证css和JavaScript的执行顺序,cs ...