模拟约瑟夫环

 Roman Roulette 

The historian Flavius Josephus relates how, in the Romano-Jewish conflict  of 67 A.D., the Romans took the town of Jotapata which he was commanding.   Escaping, Jospehus found himself trapped in a cave with 40 companions.  The  Romans discovered his whereabouts and invited him to surrender, but his  companions refused to allow him to do so.  He therefore suggested that they  kill each other, one by one, the order to be decided by lot.  Tradition has it  that the means for effecting the lot was to stand in a circle, and, beginning  at some point, count round, every third person being killed in turn.  The  sole survivor of this process was Josephus, who then surrendered to the  Romans.  Which begs the question: had Josephus previously practised quietly  with 41 stones in a dark corner, or had he calculated mathematically that he  should adopt the 31st position in order to survive?

Having read an account of this gruesome event you become obsessed with  the fear that you will find yourself in a similar situation at some time in  the future.  In order to prepare yourself for such an eventuality you decide  to write a program to run on your hand-held PC which will determine the  position that the counting process should start in order to ensure that you  will be the sole survivor.

In particular, your program should be able to handle the following variation  of the processes described by Josephus.  n > 0 people are initially  arranged in a circle, facing inwards, and numbered from 1 to n.  The  numbering from 1 to n proceeds consecutively in  a clockwise direction.   Your allocated number is 1.  Starting with person number i, counting  starts in a clockwise direction, until we get to person number k (k > 0),  who is promptly killed.  We then proceed to count a further k people in a  clockwise direction, starting with the person immediately to the left of the  victim.  The person number k so selected has the job of burying the  victim, and then returning to the position in the circle that the victim had  previously occupied.  Counting then proceeds from the person to his  immediate left, with the kth person being killed, and so on, until only one  person remains.

For example, when n = 5, and k = 2, and i = 1, the order of execution is  2, 5, 3, and 1.  The survivor is 4.

Input and Output

Your program must read input lines containing values for n and k (in  that order), and for each input line output the number of the person with  which the counting should begin in order to ensure that you are the sole  survivor.  For example, in the above case the safe starting position is 3.   Input will be terminated by a line containing values of 0 for n and k.

Your program may assume a maximum of 100 people taking part in this  event.

Sample Input

1 1
1 5
0 0

Sample Output

1
1

UVa 130 - Roman Roulette的更多相关文章

  1. Roman Roulette(约瑟夫环模拟)

    Roman Roulette Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. UVA - 185 Roman Numerals

    题目链接: https://vjudge.net/problem/UVA-185 思路: 剪枝.回溯 注意回溯的时候,是从当前点的下一个开始,而不是从已经遍历的个数点开始!!不然回溯有问题! 思路参考 ...

  3. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  4. python随机数学习笔记

    #coding:utf-8 import random # random.randint(1,10)产生1,10的随机整数 for i in range(1,5): ranint = random.r ...

  5. ascii码所有字符对照表(包含汉字和外国文字)

    http://www.0xaa55.com/thread-398-1-1.html看到了0xaa55的这个帖子,想起了2年前我在51cto发的一个帖子http://down.51cto.com/dat ...

  6. uva 759 - The Return of the Roman Empire

    #include <cstdio> #include <string> #include <map> using namespace std; ; , , , , ...

  7. UVA 590 二十一 Always on the run

     Always on the run Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  8. UVa 10048: Audiophobia

    这道题要求我们求出图中的给定的两个节点(一个起点一个终点,但这是无向图)之间所有“路径中最大权值”的最小值,这无疑是动态规划. 我开始时想到根据起点和终点用动态规划直接求结果,但最终由于题中S过大,会 ...

  9. [uva] 10067 - Playing with Wheels

    10067 - Playing with Wheels 题目页:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Ite ...

随机推荐

  1. [uart]UART中的硬件流控RTS与CTS

    转自:http://blog.csdn.net/zeroboundary/article/details/8966586 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) ...

  2. ElasticSearch自定义分析器-集成结巴分词插件

    关于结巴分词 ElasticSearch 插件: https://github.com/huaban/elasticsearch-analysis-jieba 该插件由huaban开发.支持Elast ...

  3. iOS边练边学--通知机制和键盘处理小练习

    一.发送通知 NSNotification *note = [NSNotification notificationWithName:@"通知的名称,随便写,例如:你妈叫你回家吃饭" ...

  4. HBase的rowkey设计(含实例)

    转自:http://www.aboutyun.com/thread-7119-1-1.html 对于任何系统的数据设计,我们都想提高性能,达到资源最大化利用,那么对于hbase我们产生如下问题: 1. ...

  5. 50个必备的实用jQuery代码段(转)

    1. 如何创建嵌套的过滤器: //允许你减少集合中的匹配元素的过滤器, //只剩下那些与给定的选择器匹配的部分.在这种情况下, //查询删除了任何没(:not)有(:has) //包含class为“s ...

  6. 将Excel中读取的科学计数法表示的Double数据转换为对应的字符串

    已在SegmentFault提问,目前没有答案,自行实现如下: private static String getRealNumOfScientificNotation(String doubleSt ...

  7. CSAPP chapter2 记录(bit_level_coding)

    p_154 //5x/8 define MSB_BIT (~(~)) int mul5div8(int val) { int sign = (val & MSB_BIT) == MSB_BIT ...

  8. C++primer中 CacheObj实现(非常有意思)

    //CacheObj.h #ifndef __CacheObj__ #define __CacheObj__ #include <iostream> #include <stdexc ...

  9. 你真的了解HTML吗?–雅虎面试题

    http://helloweb.wang/jingyan~jiqiao/589.html

  10. 使用Dreamweaver开发php

    1.新建站点,开发的目录 2.服务器,服务器的目录   (并修改为“测试”) 3.必须结合WANP5