1234: 约瑟夫问题-输出最后的编号(Java)
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表示还在,0表示退出。然后不断用循环搜索,模拟人报数的过程,这应该是最容易想到的了;
“虚拟环”算法,暂且就这么叫吧。同样是数组,但是初始化的时候并不是赋值为1,而是下一个人的下标。例如: 有5个人,报数为3的退出。注:下标从1开始,下标为0不考虑
初始数组为circle[6] = { 0, 2, 3, 4, 5, 1 }
,当数到3的时候,第3个人退出,因此数组变成circle[6] = { 0, 2, 4, 4, 5, 1 }
。OK,这里就不细讲了。“递推公式”算法,待补充。
代码
/**
* 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)的更多相关文章
- Java中中英文对齐输出问题,以及Java中的格式化输出
一 中英文对齐输出问题 问题,要求控制台输出如下: abcefg def 森林 阿狗 其实就是要求对齐输出,各种查找java的格式化输出,然后发现只要一个简单的“\t”就可以实现. 代码如下: Sy ...
- 约瑟夫环简介,问题以及java实现
问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴 ...
- 文件的输出与载入之java操作
一.前言 学习java没多久,关键是没怎么系统学过.都是看别人的代码来学习的.今天就把一直以来让我头痛的java IO 的一些基本操作来记录下来,加深记忆. 二.java导入文件到内存中 首先放一个 ...
- zoj 2588 Burning Bridges【双连通分量求桥输出桥的编号】
Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little cou ...
- 最长DNA重复序列长度,并输出该序列。 JAVA
1: 最长DNA重复序列长度,并输出该序列. 例如 ATCGTAGATCG,它的最大长度为4,序列为 ATCG. package com.li.huawei; import java.util.S ...
- L1-023 输出GPLT (20 分) java题解 GPLT天梯赛防坑技巧
上题目先 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的 ...
- for循环输出素数探究【java】
一.判断953是不是为素数(质数). 代码: /** 判断953是不是为素数(质数) 分析: 素数指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数. 假设953是素数,则: ...
- java读取文件内容并输出到控制台,java中实现文件复制
public class TestFileInputStream { public static void main(String [] args) { //读取指定文件中内容,并在控制台输出 Fil ...
- Java学习之约瑟夫环的两中处理方法
package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...
随机推荐
- 在被open(url)打开的子页面往父页面传值时候这样
function fnqd(zj,rwmc){ window.parent.opener.document.getElementById("jcrwModel_sjrwzj").v ...
- Arts打卡第6周
Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...
- git补充(关于pull request)转自知乎
当你想更正别人仓库里的错误时,要走一个流程: 1先 fork 别人的仓库,相当于拷贝一份,不会有人直接让你修改原仓库的 2.clone 到本地分支,做一些 bug fix 3.发起 pull requ ...
- Java 面向对象(十二)
泛型 什么是泛型 泛型:广泛通用的类型 一开始还不确定是什么类型,在使用的时候,才能确定是什么类型 (1)在开始定义的时候,留一个插口 (2)在创建对象的时候,再去插入对应的类型 泛型也可以理解为&q ...
- sqlserver 触发器语法
语法:Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)CREATE TRIGGER ...
- ArcGIS 10.5 tensorflow安装日记
ArcGIS 10.5 tensorflow安装日记 商务科技合作:向日葵,135-4855__4328,xiexiaokui#qq.com Datetime: 2019年5月27日星期一 Os: w ...
- <javaScript>document.body为null的问题
虽然body是JS中的DOM技术中所有浏览器支持的属性,但在我们的代码编写中,还是会碰到document.is null问题 例如:我们可以使用alert(document.body);的时候,就会提 ...
- 【分类算法】决策树(Decision Tree)
(注:本篇博文是对<统计学习方法>中决策树一章的归纳总结,下列的一些文字和图例均引自此书~) 决策树(decision tree)属于分类/回归方法.其具有可读性.可解释性.分类速度快等优 ...
- lvs,nginx,haproxy的优缺点,适合场景
Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件. LVS:使用集群技术和Linux操作系统实现一个高性能.高可用的服务器,它具有很好的可伸缩性.可靠性和可管理性,是一款强大 ...
- 001-poi-excel-基础、单元格使用操作
一.概述 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI ...