一、问题描述: 
    n个人围成一个圈,编号为1~n,从第一号开始报数,报到3的倍数的人离开,一直数下去,直到最后只有一个人,求此人编号。

二、问题提示:

 使用一维数组,数组元素初始为1,从1开始把数字放进数组空间,若数组元素为3的倍数,则把其置0,循环下去直到计数器(counter)减为1,则跳出循环并输出其数组下标

    1. import java.util.Scanner;
    2. public class Test {
    3. /**
    4. * @param args
    5. */
    6. public static void main(String[] args) {
    7. // TODO Auto-generated method stub
    8. System.out.println("请输入一个数字:");
    9. Scanner scan = new Scanner(System.in);
    10. int n = scan.nextInt();
    11. int counter = n;// 计数器
    12. int num = 1;// 数数
    13. int[] array = new int[n];// 声明数组
    14. for (int i = 0; i < array.length; i++) {// 数组初始化
    15. array[i] = 1;
    16. }
    17. while (counter > 1) {
    18. for (int j = 0; j < array.length; j++) {
    19. if (array[j] != 0) {// 如果数组元素不为0,则从1开始赋值
    20. array[j] = num;
    21. if (num % 3 == 0) {// 如果赋给数组元素的数能够整除3,则把此数组元素置0,计数器减1(即踢掉一个人)
    22. array[j] = 0;
    23. counter = counter - 1;
    24. if (counter == 1) {// 如果最后只剩下一个人,跳出循环
    25. break;
    26. }
    27. }
    28. num = num + 1;
    29. }
    30. }
    31. }
    32. for (int k = 0; k < n; k++) {
    33. if (array[k] != 0) {
    34. System.out.println("最后赢家的编号为:" + (k + 1));
    35. }
    36. }
    37. }
    38. }

java丢手帕 约瑟夫问题的更多相关文章

  1. 丢手帕问题 (约瑟夫问题)Java实现

    问题: 丢手帕游戏是约瑟夫问题的一个变种,游戏很简单,N个小孩围成一个圈,标号为1到N,从编号为m的小孩开始报数,报到第L个小孩退出游戏,然后下一个小孩继续从1开始报数,数到第L个小孩退出游戏,如此循 ...

  2. 丢手帕问题(环形链表)---Java 待优化

    /** * * @author Administrator * 功能:丢手帕问题 */ package com.litao; public class Demo4 { /** * @param arg ...

  3. JAVA中的约瑟夫环和猴子王问题

    今天在书上(书名< java程序设计经典300例 >李源编著)看了一个有趣的问题,那就是java版的约瑟夫问题,想必大一的小伙伴们早就用c写过了吧 今天我在复习一下 首先问题是这样的n个人 ...

  4. 丢手帕问题即约瑟夫问题的PHP解法

    问题描述:n个人排成一圈.从某个人开始,依次报数,数到m的人被杀死.下一个人重新从1开始报数,数到m的人被杀死.直到剩下最后一个人. 解决思路:从数学角度去看,每一次报数决定谁去死是一个n.m的求余数 ...

  5. java面向对象编程--Josephu问题(丢手帕问题)

    Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推 ...

  6. 约瑟夫环形链表问题、丢手帕问题、剑指offer圆圈中最后一个数问题

    public class Solution { // 左神解法,本题本质还是报数为m-1的倍数的人死.求最后一个活着的人是初始时候的哪个人       /* 报数(A) 实际人员编号(B)      ...

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

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

  8. 丢手帕问题as3版

    N个孩子围成一圈报数,报到M的退出,剩下的再从1继续报数,报到M的再退出,一直持续到只剩一个人,问剩下的是哪个? package { import flash.display.Sprite; publ ...

  9. Java循环链表实现约瑟夫环(搬运)

    public class Josephus { static class Node{ int val; Node next; Node(int v){ val=v; } }//成员类,代表节点,类似于 ...

随机推荐

  1. linux 守护进程创建流程

    #include <sys/stat.h> #include <fcntl.h> /* Bit-mask values for 'flags' argument of beco ...

  2. asp之FSO大全

    <%Function ShowDriveInfo(strFolder)'显示磁盘信息'strRootFolder="/"'strDrivInfo=ShowDriveInfo( ...

  3. 20160128_关于SVN提交不了并且还提示升级的解决方法

    因为是在项目中新增了文件夹,可能是直接在文件夹里放入文件,导致svn没有读取到文件信息,所以提交不了. 搞了一晚上,蛋疼死,解决方法:把新增的文件夹复制出来,删掉里面的 .svn文件夹.然后删掉项目里 ...

  4. OpenGL编程指南第版本学习笔记 --- OpenGL程序实现过程(win32 + OpenGL)

    1. 先上代码 头文件glCommon.h #include <GL/glew.h> #include <GL/GL.h> #include <GL/GLU.h> ...

  5. Android OpenGL ES(十二):三维坐标系及坐标变换初步 .

    OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形.但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三 ...

  6. ActiveX控件在IE中不响应Backspace消息

    1.操作输入法需要导入: #include <imm.h> #pragma comment(lib, "imm32") 2.定义变量: //键盘钩子句柄 HHOOK g ...

  7. 多线程进阶之并发工具类:CountDownLatch、CyclicBarrier

    并发工具类在java.util.concurrent包下.常用的有CountDownLatch.CyclicBarrier,用它们可以控制并发流程. 1.CountDownLatch探究: 主要用到其 ...

  8. Android简单逐帧动画Frame的实现(三)

    android之动画(三)通过AnimationDrawable控制逐帧动画     android与逐帧动画: 效果图: 当我们点击按钮时,该图片会不停的旋转,当再次点击按钮时,会停止在当前的状态. ...

  9. display:block;inline;inline-block大总结

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

  10. mapreduce 依赖组合

    mport java.io.IOException;import java.util.StringTokenizer; import org.apache.hadoop.conf.Configurat ...