我们首先来看一下约瑟夫环问题:

    给定m个人,m个人围成一圈,在给定一个数n,从m个人中的第一个人每第n个人便将其除去,求被最后一个出去的人的编号。

    思路:

       建立一个长度为m+1的数组,将其的内容初始化为0至m

我们设置变量i与j,i代表数组元素的下表,因为我设置的数组长度为m+1,所以数组下标就为每个人的编号,当i==m的时候,我们将i置为0,让其从头开始便利。

变量j为判断当前元素是否为排列的第n个元素,如果是则将当前下标为i的元素的值置为0,不是的话,i++,j++,每当我们遍历到数值为0的元素时,continue,i++,不进行其他操作。

具体代码如下:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int m=scanner.nextInt(); //读取m的值
int n = scanner.nextInt(); //读取n的值
int[] a = new int[m+1]; //设置一个长度为m+1的数组 for(int i=0;i<=m;i++) { //初始化数组,将数组的值与其下标一一对应,易懂方便操作
a[i]=i;
} /*
* 设置变量i与j
* i为判断下标即为元素值
* j为判断n的元素,如果==n即将当前i的元素除去
*/
int i=0,j=1;
boolean flag=false;//设置一个标志变量,在循环中用于break以及continue while(true) { i++; //一轮循环进行一次下表后移
flag=false; //将标志变量设置为false
if(a[i]==0) { //如果当前下标中的值为0,即跳过
flag=true;
if(i==m) //判断此时的i是否==m,若果等于m则让其重置为0
i=0;
} if(flag) //对应上面的函数
continue; if(j==n) { //如果j==n了
if(PanDuan(a)) { //判断此时数组中是否只有一个非零元素,如果是则当前找到的元素为最后一个元素,否则执行else
System.out.println(i);
flag=true; //因为找到了最后一个元素,则设置标志变量为true
}
else { //只满足j==n,不满足其为最后一个元素,则让当前元素的内容置为0,且让j=0,开始新的计数
a[i]=0;
j=0;
} } if(flag) //找到了最后一个元素,跳出循环
break; if(i==m) //如果i==m,则让i=0
i=0; j++; //一轮循环,j++ }
} static boolean PanDuan(int [] a) { //判断给定数组中石否只有一个非零元素
int count =0;
for(int i=0;i<a.length;i++) {
if(a[i]!=0)
count++;
} if(count==1)
return true;
return false;
} }

 此方法为数组解决,比起用集合麻烦,但是适用于还没有学习集合api的小伙伴们。有更简单的方法可以跟我交流哦~

j使用数组实现约瑟夫环 java的更多相关文章

  1. C语言数组实现约瑟夫环问题,以及对其进行时间复杂度分析

    尝试表达 本人试着去表达约瑟夫环问题:一群人围成一个圈,作这样的一个游戏,选定一个人作起点以及数数的方向,这个人先数1,到下一个人数2,直到数到游戏规则约定那个数的人,比如是3,数到3的那个人就离开这 ...

  2. 约瑟夫环 java实现

    问题: N个人从1到N编号.围城一圈,从1開始报数, 数到X时,将X的编号输出,并将那个人踢出, 下一个从1再開始报数,直到全部人都出去 思路: 就是计数.移除,没有太深的思想,直接上代码: pack ...

  3. 约瑟夫环问题-循环链表VS数组

    2013-08-18 21:27:50 循环链表.数组解决约瑟夫环问题的比较 注意几点: 循环链表的建立不难,在删除循环链表中元素时,用pCur->next != pCur判断结束: 每一轮计数 ...

  4. 通过例子进阶学习C++(六)你真的能写出约瑟夫环么

    本文是通过例子学习C++的第六篇,通过这个例子可以快速入门c++相关的语法. 1.问题描述 n 个人围坐在一个圆桌周围,现在从第 s 个人开始报数,数到第 m 个人,让他出局:然后从出局的下一个人重新 ...

  5. 约瑟夫环问题-Java数组解决

    约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序.下面是我用java实现的解决方法. clas ...

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

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

  7. 约瑟夫环 --- 面向对象 --- java代码

    约瑟夫环 的 面向对象 解法 罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个 ...

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

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

  9. 约瑟夫环的C语言数组实现

    约瑟夫环问题的具体描述是:设有编号为1,2,……,n的n个(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,才从他的下一个人起重新报数,报到m时停止报数,报m的出圈, ...

随机推荐

  1. Python学习---DjangoForm的学习

    DjangoForm之创建工程 Form是什么东西: 用于验证用户请求数据合法性的一个组件 普通的Form提交的弊端: 1.用户提交数据的验证 2.前台需要进行错误信息的提示 3.需要保留上次用户输入 ...

  2. WCF已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性

    <?xml version="1.0" encoding="utf-8"?> <configuration> <connectio ...

  3. 解决Android sdk manager无法访问google服务器的问题

    开发Android应用,使用最广泛的开发工具应该就是ADT了,但是ADT默认只带了Android 4.3(API 18),如果需要安装其他版本的SDK,就需要启动Android SDK Manager ...

  4. [COGS 0107][NOIP 2003] 传染病控制

    107. [NOIP2003] 传染病控制 ★★★   输入文件:epidemic.in   输出文件:epidemic.out   简单对比时间限制:1 s   内存限制:128 MB [问题背景] ...

  5. TCP/IP 协议图--网络层中的 IP 协议

    IP(IPv4.IPv6)相当于 OSI 参考模型中的第3层——网络层.网络层的主要作用是“实现终端节点之间的通信”.这种终端节点之间的通信也叫“点对点通信”. 网络的下一层——数据链路层的主要作用是 ...

  6. C++课堂作业(2)

    github的链接: https://github.com/deepYY/object-oriented/tree/master/PAT.1025 题目 给定一个常数K以及一个单链表L,请编写程序将L ...

  7. 安装批量装机工具cobbler过程

    首先想到的自然是yum install cobbler,结果找不到这个包,又懒得去官网下源码安装,于是乎想到增加第三方yum源,之后继续yum install cobbler,搞定. 然后启动cobb ...

  8. .Net Intelligencia.UrlRewriter 重定向参数中文支持配置方法

    在使用.Net 官方 Url重定向组件时,发现若原地址包含中文,如:http://localhost/首页.html 重定向为:http://localhost/index.aspx?id=首页  时 ...

  9. python Queue在两个地方

    其一: Source code: Lib/queue.py The queue module implements multi-producer, multi-consumer queues. It ...

  10. Save and read double array in a binary file

    ;} 32 bytes read 9.5 -3.4 1 2.1 "