POJ 2359 Questions(约瑟夫环——数学解法)
题目链接:
http://poj.org/problem?id=2359
题意描述:
输入一个字符串
按照下面的规则,如果剩下的最后一个字符是‘?’,输出“Yes”,如果剩下的最后一个字符是' '(空格),输出“No”,其他字符均输出“No comments”
规则:
将该字符串首尾相接,从第一个字符数,数到1999(如果数到结尾则从头开始数,构成约瑟夫环)时,将该字符删除,从删除字符的下一个开始从头数,
知道删除剩余最后一个字符。
解题思路:
刚开始读完题的时候,并没有想到是约瑟夫问题(事后恍然大悟)。约瑟夫问题,有两种解法,分别是模拟解法和数学解法。
模拟的话,直接模拟报数过程,使用数组,链表均可。
不过这里介绍一下更高效的数学解法,先上代码:
int p=;
for(i=;i<=l;i++)
p=(p+)%i;
由于我们只需要知道最后一个字符的位置,没必要模拟过程,所以我们通过一定的数学计算计算出要求的结果即可。
具体讲解请参考博客:http://blog.csdn.net/allenhappy/article/details/26713241(原谅我的偷懒,他讲的相对还是很清楚的)
AC代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<algorithm>
using namespace std;
const int inf=; char a[],b[];
int main()
{
int i,l;
b[]='\0';
while(gets(a) != NULL)
strcat(b,a);
l=strlen(b);
int p=;
for(i=;i<=l;i++)
p=(p+)%i; if(b[p]=='?')
printf("Yes\n");
else if(b[p]==' ')
printf("No\n");
else
printf("No comments\n");
return ;
}
POJ 2359 Questions(约瑟夫环——数学解法)的更多相关文章
- POJ 2359 Questions
Questions Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1228 Accepted: 449 Descript ...
- 约瑟夫环问题的链表解法和数学解法(PHP)
约瑟夫环问题 一群猴子排成一圈.按1,2,-,n依次编号.然后从第1仅仅開始数,数到第m仅仅,把它踢出圈.从它后面再開始数,再数到第m仅仅.在把它踢出去-.如此不停的进行下去.直到最后仅仅剩下一仅仅猴 ...
- LA 3882 经典约瑟夫环问题的数学递推解法
就是经典约瑟夫环问题的裸题 我一开始一直没理解这个递推是怎么来的,后来终于理解了 假设问题是从n个人编号分别为0...n-1,取第k个, 则第k个人编号为k-1的淘汰,剩下的编号为 0,1,2,3. ...
- Josephus环的四种解法(约瑟夫环)
约瑟夫环 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个 ...
- Poj 3517 And Then There Was One(约瑟夫环变形)
简单说一下约瑟夫环:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个 ...
- poj 1012 & hdu 1443 Joseph(约瑟夫环变形)
题目链接: POJ 1012: id=1012">http://poj.org/problem?id=1012 HDU 1443: pid=1443">http:// ...
- 剑指offer-面试题62-圆圈中最后剩下的数字-约瑟夫环-解法2
/* 题目: 约瑟夫环问题. 思路: 数学规律 f(n)=0(n=1),[f(n-1,m)+m]%n(n>1) */ #include<iostream> #include<l ...
- 简洁之美 -约瑟夫环的python 解法
问题描述: 约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下 ...
- Joseph POJ - 1012 约瑟夫环递推
题意:约瑟夫环 初始前k个人后k个人 问m等于多少的时候 后k个先出去 题解:因为前k个位置是不动的,所以只要考虑每次递推后的位置在不在前面k个就行 有递推式 ans[i]=(ans[i-1]+m ...
随机推荐
- SpringMVC入门第二天
SpringMVC第二天 1. 回顾 1.Springmvc介绍? Springmvc是Spring公司 2.Springmvc入门程序 第一步:Web工程 第二步:导Jar包 第三步:web.x ...
- java开发网易电话面试 一面总结
晚上八点多自己在看视频的时候突然接到杭州来的一个电话,当时觉得很奇怪,突兀,接通之后被告知是杭州网易打来的,没有简单的自我介绍,没有多余的废话,直接入主题,吓得我心里怪紧张的,完全没有准备,但是也没有 ...
- Postman几种常用方式
Postman几种常用方式 1.get请求直接拼URL形式 对于http接口,有get和post两种请求方式,当接口说明中未明确post中入参必须是json串时,均可用url方式请求 参数既可以写到U ...
- MSH:一个简单SH工具实现
本文将分为不同的Part,分别实现Shell的一部分功能. msh从CSAPP的SHLAB出发,逐渐完善SHELL功能,并移植到自己的OS上. Github: https://github.com/H ...
- 201521123121 《JAVA程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声 ...
- 201521123052《Java程序设计》第7周学习总结
1. 本周学习总结 参考资料: XMind 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boolean contains(Ob ...
- 201521123004 《Java程序设计》第1周学习总结
1. 本章学习总结 (1)安装各种软件(jdk,eclipse,git(安装不了)) 注册账号(博客,网易邮箱(QQ邮箱不能用)码云) 创建项目(码云,Java) (2)了解JAVA语言的发展史(su ...
- 201521123073 《Java程序设计》第13周学习总结
1. 13周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jm ...
- 201521123114 《Java程序设计》第10周学习总结
1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 1. 创建线程方式: 定义Thread的子类 定义实现Runnable接口的类,实现run() 2. 调用s ...
- Q:哪里可以注册hk域名?A:这里!这里!(小白绢挥手)
注意!前方有一条比你妈手中的竹板还硬的推文出没······ 咳咳,清清喉咙,预备唱! (请自动代入甜蜜蜜的曲调) 甜蜜蜜你笑的甜蜜蜜 好像花儿开在春风里 开在春风里 在哪里在哪里见过你 .HK域 ...