WUSTOJ 1234: 约瑟夫问题-输出最后的编号

参考资料

约瑟夫问题——百度百科

Description

n个人围成一圈,依次从1至n编号。从编号为1的人开始1至k报数,凡报数为k的人退出圈子,输出最后留下的一个人原来的编号。

Input

首先输入一个t,表示有t组数据(1<= t <= 10010),然后有t行,每行有2个正整数n和k。(1<= n,k<= 20)

Output

对于每组测试数据,输出一个数,表示最后留下来的人的编号。

Sample Input

3
10 3
7 1
5 4

Sample Output

4
7
1

题目分析

这道题目,有几种做法, 我都尝试了一下,结果提交时间太不稳定了,其他的做法代码就没贴上来。下面代码用的是百度百科里的算法(我认为应该是最好的,然而提交时间最长,可能数据太短了吧)。

  1. 最基础的算法应该是,用数组表示所有人,1表示还在,0表示退出。然后不断用循环搜索,模拟人报数的过程,这应该是最容易想到的了;

  2. “虚拟环”算法,暂且就这么叫吧。同样是数组,但是初始化的时候并不是赋值为1,而是下一个人的下标。例如: 有5个人,报数为3的退出。注:下标从1开始,下标为0不考虑

    初始数组为circle[6] = { 0, 2, 3, 4, 5, 1 },当数到3的时候,第3个人退出,因此数组变成circle[6] = { 0, 2, 4, 4, 5, 1 }。OK,这里就不细讲了。

  3. “递推公式”算法,待补充

代码

/**
* AC用时:1263ms
* @author wowpH
* @version 4.0
* @date 2019年4月11日 下午11:57:37
*/
import java.util.Scanner; public class Main { private Scanner sc;
private int t, n, k;
private int f, i; public Main() {
sc = new Scanner(System.in);
t = sc.nextInt();
while(t > 0) {
n = sc.nextInt();
k = sc.nextInt();
f = 0;
for(i = 1; i <= n; i++) {
f = (f + k) % i;
}
System.out.println(f + 1);
t--;
}
sc.close();
} public static void main(String[] args) {
new Main();
} }

小结

对于一些经典算法,要考虑用多种思路解答,不能局限于某一种方法,这道题目就是很好的例子。对这类问题可适当做一些扩展,这样更有利于对算法的记忆。


1234: 约瑟夫问题-输出最后的编号(Java)的更多相关文章

  1. Java中中英文对齐输出问题,以及Java中的格式化输出

    一 中英文对齐输出问题 问题,要求控制台输出如下: abcefg  def 森林 阿狗 其实就是要求对齐输出,各种查找java的格式化输出,然后发现只要一个简单的“\t”就可以实现. 代码如下: Sy ...

  2. 约瑟夫环简介,问题以及java实现

    问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴 ...

  3. 文件的输出与载入之java操作

    一.前言 学习java没多久,关键是没怎么系统学过.都是看别人的代码来学习的.今天就把一直以来让我头痛的java  IO 的一些基本操作来记录下来,加深记忆. 二.java导入文件到内存中 首先放一个 ...

  4. zoj 2588 Burning Bridges【双连通分量求桥输出桥的编号】

    Burning Bridges Time Limit: 5 Seconds      Memory Limit: 32768 KB Ferry Kingdom is a nice little cou ...

  5. 最长DNA重复序列长度,并输出该序列。 JAVA

    1:  最长DNA重复序列长度,并输出该序列. 例如  ATCGTAGATCG,它的最大长度为4,序列为 ATCG. package com.li.huawei; import java.util.S ...

  6. L1-023 输出GPLT (20 分) java题解 GPLT天梯赛防坑技巧

    上题目先 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的 ...

  7. for循环输出素数探究【java】

    一.判断953是不是为素数(质数). 代码: /** 判断953是不是为素数(质数) 分析: 素数指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数. 假设953是素数,则: ...

  8. java读取文件内容并输出到控制台,java中实现文件复制

    public class TestFileInputStream { public static void main(String [] args) { //读取指定文件中内容,并在控制台输出 Fil ...

  9. Java学习之约瑟夫环的两中处理方法

    package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...

随机推荐

  1. awk如何传递外部变量?

    第一种: [root@master yjt]# var=1 [root@master yjt]# echo |awk -v value=$var '{print value}' 1 第二种: [roo ...

  2. Fluent 时间步长【转载】

    转载自:http://blog.sina.com.cn/s/blog_4ada3be301011rjp.html 用FLUENT计算非稳态问题,是不是在计算时必须保证在每个时间步timestep里都要 ...

  3. PaintCode 教程:矢量图轻松转换成CoreGraphics代码

    本文译自Ranwenderlich的这篇:http://www.raywenderlich.com/100281/paintcode-for-designers-getting-started Pai ...

  4. java权限管理与用户角色权限设计

    java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器 ...

  5. flask上下文流程面试总结

  6. Windows安装Centos7双系统后Windows启动项消失

    原文: https://www.cnblogs.com/xinglichao/p/9999049.html https://blog.csdn.net/yingzinanfei/article/det ...

  7. Intellij-编码设置

    目录 文件编码修改 @(目录) 文件编码修改 • 上图标注 1 所示,IDE 的编码默认是 UTF-8 , Project Encoding 虽然默认是 GBK ,但是一般都建议 修改为 UTF-8 ...

  8. hyperledger学习资料

    http://www.cnblogs.com/aberic/p/7527831.htmlhttps://www.ibm.com/developerworks/cn/cloud/library/cl-t ...

  9. 【Leetcode_easy】728. Self Dividing Numbers

    problem 728. Self Dividing Numbers solution1: 使用string类型来表示每位上的数字: class Solution { public: vector&l ...

  10. 解决访问github等网站慢或下载失败的问题

    最近老大push项目,正常的git clone每次都是下载一部分就断掉了.下面介绍网上找到的两种方法: 方法一: 1.打开网站https://www.ipaddress.com/: 2.分别在上面打开 ...