2746:约瑟夫问题poj
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的更多相关文章
- POJ 2359 Questions(约瑟夫环——数学解法)
		题目链接: http://poj.org/problem?id=2359 题意描述: 输入一个字符串 按照下面的规则,如果剩下的最后一个字符是'?',输出"Yes",如果剩下的最后 ... 
- poj 1012 & hdu 1443 Joseph(约瑟夫环变形)
		题目链接: POJ 1012: id=1012">http://poj.org/problem?id=1012 HDU 1443: pid=1443">http:// ... 
- POJ 1012 Joseph 约瑟夫问题
		http://poj.org/problem?id=1012 早上去图书馆复习苦逼的复习....万恶的数逻.T T我还要自我安慰的说复习完了奖励回来刷水题~ 10点多的时候外面校运会大吼撑杆跳的那个. ... 
- poj 1012 Joseph (约瑟夫问题)
		Joseph Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 47657 Accepted: 17949 Descript ... 
- Poj 3517 And Then There Was One(约瑟夫环变形)
		简单说一下约瑟夫环:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个 ... 
- Joseph POJ - 1012  约瑟夫环递推
		题意:约瑟夫环 初始前k个人后k个人 问m等于多少的时候 后k个先出去 题解:因为前k个位置是不动的,所以只要考虑每次递推后的位置在不在前面k个就行 有递推式 ans[i]=(ans[i-1]+m ... 
- POJ 2886.Who Gets the Most Candies? -线段树(单点更新、类约瑟夫问题)
		线段树可真有意思呢续集2... 区间成段的替换和增减,以及区间求和等,其中夹杂着一些神奇的操作,数据离散化,简单hash,区间异或,还需要带着脑子来写题. 有的题目对数据的操作并不是直接按照题面意思进 ... 
- POJ 3517 And Then There Was One( 约瑟夫环模板 )
		链接:传送门 题意:典型约瑟夫环问题 约瑟夫环模板题:n个人( 编号 1-n )在一个圆上,先去掉第m个人,然后从m+1开始报1,报到k的人退出,剩下的人继续从1开始报数,求最后剩的人编号 /**** ... 
- POJ 2886 Who Gets the Most Candies?(线段树·约瑟夫环)
		题意 n个人顺时针围成一圈玩约瑟夫游戏 每一个人手上有一个数val[i] 開始第k个人出队 若val[k] < 0 下一个出队的为在剩余的人中向右数 -val[k]个人 val[k ... 
随机推荐
- C#实现局域网内远程开机
			1.远程开机原理 远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊 ... 
- JAVA基础知识总结:二
			一.数据类型 1.常量 在程序运行的过程中,值不会发生改变的标识符 常量的分类:整数常量.小数常量.布尔值常量.字符常量.字符串常量.null常量 2.变量 表示的值可以发生改变 定义一个变量,需要在 ... 
- AsposeCell特定格式表格
			效果图: Workbook workbook = new Workbook(); Worksheet sheet = (Worksheet)workbook.Worksheets[0]; Cells ... 
- windows环境中利用NMake工具编译连接C++源代码
			这篇文章是上一篇文章(http://www.cnblogs.com/LCCRNblog/p/4532643.html)的补充,因此需要先看看上一篇文章. 最近在写代码的时候,需要通过命令的方式来执行生 ... 
- 手工搭建ABP框架(1) - Web项目
			为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7295533.html ABP是 ASP.NET Boilerplate Proj ... 
- css英文字符或者数字不换行的问题
			table-layout:fixed; word-break: break-all; overflow:hidden; 
- 快速学会使用Fiddler抓包 截包伪造提交包
			1.Fiddler介绍 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑,移动设备和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的 ... 
- HTML5网页音乐播放器
			1功能介绍 HTML5中推出了音视频标签,可以让我们不借助其他插件就可以直接播放音视频.下面我们就利用H5的audio标签及其相关属性和方法来制作一个简单的音乐播放器.主要包括以下几个功能: 1.播放 ... 
- 使用TP5创建一个REST API
			原文在这里 : http://hmw.iteye.com/blog/1190827 tp自带的api,get请求接口 /** * 显示资源列表 * * @return \think\Response ... 
- 深入分析Android动画(二)
			上回书说到Android动画的分类以及基本使用,这会书主要说Android属性动画的原理,对于View动画的原理本篇不做深入分析.对于Android动画的基础请看深入分析Android动画(一) 我们 ... 
