java丢手帕 约瑟夫问题
一、问题描述:
n个人围成一个圈,编号为1~n,从第一号开始报数,报到3的倍数的人离开,一直数下去,直到最后只有一个人,求此人编号。
二、问题提示:
使用一维数组,数组元素初始为1,从1开始把数字放进数组空间,若数组元素为3的倍数,则把其置0,循环下去直到计数器(counter)减为1,则跳出循环并输出其数组下标
- import java.util.Scanner;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- System.out.println("请输入一个数字:");
- Scanner scan = new Scanner(System.in);
- int n = scan.nextInt();
- int counter = n;// 计数器
- int num = 1;// 数数
- int[] array = new int[n];// 声明数组
- for (int i = 0; i < array.length; i++) {// 数组初始化
- array[i] = 1;
- }
- while (counter > 1) {
- for (int j = 0; j < array.length; j++) {
- if (array[j] != 0) {// 如果数组元素不为0,则从1开始赋值
- array[j] = num;
- if (num % 3 == 0) {// 如果赋给数组元素的数能够整除3,则把此数组元素置0,计数器减1(即踢掉一个人)
- array[j] = 0;
- counter = counter - 1;
- if (counter == 1) {// 如果最后只剩下一个人,跳出循环
- break;
- }
- }
- num = num + 1;
- }
- }
- }
- for (int k = 0; k < n; k++) {
- if (array[k] != 0) {
- System.out.println("最后赢家的编号为:" + (k + 1));
- }
- }
- }
- }
java丢手帕 约瑟夫问题的更多相关文章
- 丢手帕问题 (约瑟夫问题)Java实现
问题: 丢手帕游戏是约瑟夫问题的一个变种,游戏很简单,N个小孩围成一个圈,标号为1到N,从编号为m的小孩开始报数,报到第L个小孩退出游戏,然后下一个小孩继续从1开始报数,数到第L个小孩退出游戏,如此循 ...
- 丢手帕问题(环形链表)---Java 待优化
/** * * @author Administrator * 功能:丢手帕问题 */ package com.litao; public class Demo4 { /** * @param arg ...
- JAVA中的约瑟夫环和猴子王问题
今天在书上(书名< java程序设计经典300例 >李源编著)看了一个有趣的问题,那就是java版的约瑟夫问题,想必大一的小伙伴们早就用c写过了吧 今天我在复习一下 首先问题是这样的n个人 ...
- 丢手帕问题即约瑟夫问题的PHP解法
问题描述:n个人排成一圈.从某个人开始,依次报数,数到m的人被杀死.下一个人重新从1开始报数,数到m的人被杀死.直到剩下最后一个人. 解决思路:从数学角度去看,每一次报数决定谁去死是一个n.m的求余数 ...
- java面向对象编程--Josephu问题(丢手帕问题)
Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推 ...
- 约瑟夫环形链表问题、丢手帕问题、剑指offer圆圈中最后一个数问题
public class Solution { // 左神解法,本题本质还是报数为m-1的倍数的人死.求最后一个活着的人是初始时候的哪个人 /* 报数(A) 实际人员编号(B) ...
- Java学习之约瑟夫环的两中处理方法
package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...
- 丢手帕问题as3版
N个孩子围成一圈报数,报到M的退出,剩下的再从1继续报数,报到M的再退出,一直持续到只剩一个人,问剩下的是哪个? package { import flash.display.Sprite; publ ...
- Java循环链表实现约瑟夫环(搬运)
public class Josephus { static class Node{ int val; Node next; Node(int v){ val=v; } }//成员类,代表节点,类似于 ...
随机推荐
- 用GeneratedKeyHolder获得新建数据主键值
public User createUser(final User user) { final String sql = "insert into sys_users(username, p ...
- 获取Excel部分数据并很据项目要求计算适宜性等级综合指数判断该地区的土壤适宜性
代码运行前请先导入jxl架包,以下代码仅供学习参考: 下图为项目中的Excel: ExcelTest02类代码如下: // 读取Excel的类 import java.io.BufferedWrite ...
- 689C - Mike and Chocolate Thieves 二分
题目大意:有四个小偷,第一个小偷偷a个巧克力,后面几个小偷依次偷a*k,a*k*k,a*k*k*k个巧克力,现在知道小偷有n中偷法,求在这n种偷法中偷得最多的小偷的所偷的最小值. 题目思路:二分查找偷 ...
- hiho#1128 : 二分·二分查找
input 1<=n<=1e6 1<=k<=2*1e9 a1 a2 ... an 1<=an<=2*1e9 output k存在则输出k是第几大的数,否则输出-1 ...
- ACE_Get_Opt解析命令行
ACE_Get_Opt是一种解析命令行参数选项的迭代器. 1:构造方法 ACE_Get_Opt需要引用头文件,#include "ace/Get_Opt.h". ACE_Get_O ...
- 8633 回文划分(dp)
8633 回文划分 该题有题解 时间限制:1000MS 内存限制:1000K提交次数:169 通过次数:63 题型: 编程题 语言: G++;GCC Description 我们说一个字符串是回 ...
- angularjs model.service vs provider vs factory?
<!DOCTYPE html> <html ng-app="app"> <head> <script src="http://c ...
- realypay
1.判断新老接口的方法: 去网站后台接口配置的地方,如果有merchantno参数就是新接口,否则为老接口,新接口则不需要更新了. 2.老接口需要去网站后台卸载老的接口,然后再用新的(下载的文件)覆盖 ...
- Opencv 图像叠加 添加水印
Opencv 图像叠加 添加水印 C++: void Mat::copyTo(OutputArray m) const C++: void Mat::copyTo(OutputArray m, Inp ...
- AngularJS数据建模(转载)
出处不明 我们知道,AngularJS并没有自带立等可用的数据建模方案.而是以相当抽象的方式,让我们在controller中使用JSON数据作为模 型.但是随着时间的推移和项目的成长,我意识到这种建模 ...