今天偶然发现一个很经典的算法问题:丢手帕问题。问题的具体描述是:N个人围成一圈,然后从第A个人开始报数(报数从1开始)。报数为B的人出列,然后后面的人从新开始报数,请问,最后一个人是多少号。

刚开始觉得是一个很简单的问题,几分钟应该就可以搞定。不过真的自己去写的时候,却花了将近一个小时。

附代码如下:

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class Main {

//一旦设定就不再变

static int cycle;

public static void main(String[] args) {

List list = new ArrayList();

Scanner scan = new Scanner(System.in);

System.out.print(“请输入人数:”);

int count = scan.nextInt();

System.out.print(“请输入从第几个人开始报数:”);

int start = scan.nextInt();

System.out.print(“请输入报数的周期:”);

cycle = scan.nextInt();

//初始化所有的人

for (int i = 1; i <= count; i ++) {

list.add(“” + i);

}

System.out.println(Handkerchief(list, start));

}

public static String Handkerchief(List list, int start) {

//得到现在这个圈中人的总数

int count = list.size();

if (count > 1) {

//如果报数的最终位置

int current = start + cycle – 1; //减一,是因为从他开始报数

//如果当前最终报数位置大于人的总数

if (current > count) {

int temp = current % count;

if (temp == 0) {

list.remove(count -1);

return Handkerchief(list, 1);

}

list.remove(temp – 1);

return Handkerchief(list, temp);

} else if(current == count) { //报数的最终位置刚好是最后一个人

//因为链表起始位0,人的编号起始1

list.remove(current – 1);

return Handkerchief(list, 1);

} else {

list.remove(current – 1);

return Handkerchief(list, current);

}

}

//如果只剩下最后一个人,就返回他的位置

return list.get(0);

}

}

在测试过程中发现,程序有一个毛病,就是数据大于一万之后,就会出现栈溢出,在下学艺不精,研究了很久没能够解决这个问题。

如果哪位大神发现其中的问题,麻烦说明一下。

或许,坚持才是最好的选择

丢手帕问题 java_丢手帕问题,java实现相关推荐

  1. 丢手帕问题 java_丢手帕问题 (java实现)

    /** *@author zhouhong *@fuction:丢手帕问题 */ package com.zhouhong10; import com.zhouhong10.*; public cla ...

  2. 丢手帕问题 java_丢手帕问题java 实现

    首先,我表明,我这个人喜欢偷懒.我先在网上看了一下.把代码下下来,用工具一运行,发现结果不对.明明已经踢出去的人,还可以继续游戏.找了半天,发现网上全是一样的,呵呵,可想而知现在的人多么的懒.呵呵,没 ...

  3. 丢手帕问题 java_初学java丢手帕问题

    packagediushoupa;importjava.util.Scanner;publicclasstext1{publicstaticvoidmain(String[]args){CycLine ...

  4. 丢番图生平编程java_丢番图与麦乐鸡购买问题

    在MIT公开课<计算机科学与编程导论>的Assignment2中,提到了丢番图方程,并有趣地将丢番图方程和卖麦乐鸡的问题联系到了一起. 首先让我们来看看维基百科中介绍的丢番图方程. 一.丢 ...

  5. 丢番图生平编程java_丢番图

    [拼音]:Diufantu [外文]:Diophantus (活动于250年前后) 希腊代数学家.对他的生平事迹人们知道得很少.但流传着一首短诗(或墓志铭),用谜语的形式叙述了他的生平:"丢 ...

  6. jsp中如何运行java_从上帝视角看Java如何运行

    有头发且有趣的码农万里挑一~ 06 有料叔 | 一位有故事的程序猿 JVM内存结构 可以看出JVM从宏观上可以分为 '内部'  及 '外部'  两个部分(便于记忆理解): '内部'包含:线程共享(公有 ...

  7. 我的世界最佳java_我的世界JAVA版20w47a

    我的世界JAVA版20w47a是一款模拟沙盒游戏,游戏中有不同的玩法,可以让你在这里进行刺激的挑战,同时还可以制作各种物品,想要收集材料就需要去探索各个地图,你还可以与玩家互动,分享自己的创意,相互交 ...

  8. 我的世界海洋java_我的世界Java版开发者们畅聊水域更新

    我的世界1.13水域更新将会是一次非常庞大的更新,该版本还在开发和设计中,想了解开发者们将会在海洋世界里添加什么好玩有趣的内容吗?那就赶快来看看吧! [我的世界pc版交流群1]欢迎各位小伙伴加入!群号 ...

  9. 计算机术语桢什么意思,请问电脑丢帧严重的“丢帧”是啥意思哦?

    光学鼠标的光学传感器就像一个摄像机,它连续的高速的对定位平面进行拍照(或者说录像).这种拍照是在一个固定频率上的(有人叫它刷新率,有人叫它扫描频率,都是一样,这里就叫它扫描频率了),并且每帧画面有个尺 ...

最新文章

  1. C语言文件操作函数大全
  2. SharePoint 【架构系列】-- SharePoint的处理(Process)与执行模型(Trust Model) 01
  3. Html5本地存储和本地数据库
  4. JSON学习笔记(二)- 对象
  5. 最好的FLV视频下载器 维棠 (支持优酷视频下载、土豆视频下载等)
  6. java aio聊天_JAVA aio简单使用
  7. leetcode 215. 数组中的第 K个最 大的元素(堆排序,C语言)
  8. 2019央视春晚公布主持阵容 语言类节目将有突破
  9. mysql 存储过程(提供查询语句并返回查询执行影响的行数)
  10. exchange 2003 event id 1221
  11. 没学好 Netty ,要凉?
  12. 编译HG255D的openwrt固件
  13. 阶段3 1.Mybatis_11.Mybatis的缓存_2 延迟加载和立即加载的概念
  14. 一起学Windows phone7开发(五.一个时钟的例子)
  15. 申请ARM DS-5单月试用版并安装
  16. 手机app注册登录服务器客户端流程图
  17. 杭州自己缴纳社保五险条件
  18. 3dmax建模如何设置凹凸贴图
  19. 学生学籍管理系统_学生登陆系统查询与修改信息
  20. halcon中如何生成椭圆_Halcon中关于角度计算和测量拟合的算子详解

热门文章

  1. 怎么做网线,网线水晶头接法和线序(图文详解)
  2. java多线程设计模式详解[推荐]
  3. sec^3 不定积分
  4. 【Allegro_SPB_16.6安装详细教程】手把手搭建到Win10
  5. cadence SPB17.4 - allegro - allegro_free_viewer
  6. 天河服务器维修,天河云服务器升级
  7. TX2安装opencv3.4.0
  8. ie收藏夹在电脑什么位置
  9. nodejs中生成uuid
  10. 【算法基础四】C语言小项目实战---通讯录管理系统(单链表)