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个人围 ...
随机推荐
- kde的配置文件
主要是home目录下:/.kde4/share/config/ 如果实在是搞不定,还可以直接将.kde4目录全部删除或者替换即可.
- vue tab嵌入iframe切换不刷新,相对完整的方案
说到Vue的简单.便捷.高效,谁用谁喜欢,自然企业应用也来玩一把,三大经典组件:树控件,网格控件,选项卡控件: 本章先说选项卡tab控件的嵌入iframe. 本次主要解决以下问题: 1.tab控件混合 ...
- lucene反向索引——倒排表无论是文档号及词频,还是位置信息,都是以跳跃表的结构存在的
转自:http://www.cnblogs.com/forfuture1978/archive/2010/02/02/1661436.html 4.2. 反向信息 反向信息是索引文件的核心,也即反向索 ...
- JSP(工作原理,组成部分,指令标签,动作标签,隐式对象)
目录 JSP JSP 什么是JSP JSP全名为Java Server Pages 中文名叫java服务器页面 它是在传统的网页HTML文件(.htm,.html)中插入Java程序段和JSP标记 后 ...
- Mybatis 中的转义字符(转帖)
下文来自:https://www.cnblogs.com/dato/p/7028723.html 在此感谢作者的辛勤付出. 记录以下mybatis中的转义字符,方便以后自己看一下 Mybatis转义 ...
- MATLAB中图像的基本操作
MATLAB中图像的基本操作 1.读取.显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片.其中读取函数imread()原型: imread: A = imread( ...
- SQL-W3School-函数:SQL MAX() 函数
ylbtech-SQL-W3School-函数:SQL MAX() 函数 1.返回顶部 1. MAX() 函数 MAX 函数返回一列中的最大值.NULL 值不包括在计算中. SQL MAX() 语法 ...
- Elasticsearch .net 记录-1
简介 ElasticSearch是一个开源的分布式搜索引擎,具备高可靠性,支持非常多的企业级搜索用例.像Solr4一样,是基于Lucene构建的.支持时间时间索引和全文检索.官网:http://www ...
- LeetCode_27. Remove Element
27. Remove Element Easy Given an array nums and a value val, remove all instances of that value in-p ...
- 返回日期格式:2017-12-03T13:58:58.901Z,判断时间间隔 如 “刚刚”,“一分钟前”,“一小时前”等
后台返回的格式如下: 实现输出如下: 我的处理如下: // 处理数据 2017-11-28T02:41:09.487Z // 请求的时间戳.日期格式按照ISO8601标准表示,并需要使用UTC时间. ...