丢手帕问题 java_丢手帕问题,java实现
今天偶然发现一个很经典的算法问题:丢手帕问题。问题的具体描述是: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实现相关推荐
- 丢手帕问题 java_丢手帕问题 (java实现)
/** *@author zhouhong *@fuction:丢手帕问题 */ package com.zhouhong10; import com.zhouhong10.*; public cla ...
- 丢手帕问题 java_丢手帕问题java 实现
首先,我表明,我这个人喜欢偷懒.我先在网上看了一下.把代码下下来,用工具一运行,发现结果不对.明明已经踢出去的人,还可以继续游戏.找了半天,发现网上全是一样的,呵呵,可想而知现在的人多么的懒.呵呵,没 ...
- 丢手帕问题 java_初学java丢手帕问题
packagediushoupa;importjava.util.Scanner;publicclasstext1{publicstaticvoidmain(String[]args){CycLine ...
- 丢番图生平编程java_丢番图与麦乐鸡购买问题
在MIT公开课<计算机科学与编程导论>的Assignment2中,提到了丢番图方程,并有趣地将丢番图方程和卖麦乐鸡的问题联系到了一起. 首先让我们来看看维基百科中介绍的丢番图方程. 一.丢 ...
- 丢番图生平编程java_丢番图
[拼音]:Diufantu [外文]:Diophantus (活动于250年前后) 希腊代数学家.对他的生平事迹人们知道得很少.但流传着一首短诗(或墓志铭),用谜语的形式叙述了他的生平:"丢 ...
- jsp中如何运行java_从上帝视角看Java如何运行
有头发且有趣的码农万里挑一~ 06 有料叔 | 一位有故事的程序猿 JVM内存结构 可以看出JVM从宏观上可以分为 '内部' 及 '外部' 两个部分(便于记忆理解): '内部'包含:线程共享(公有 ...
- 我的世界最佳java_我的世界JAVA版20w47a
我的世界JAVA版20w47a是一款模拟沙盒游戏,游戏中有不同的玩法,可以让你在这里进行刺激的挑战,同时还可以制作各种物品,想要收集材料就需要去探索各个地图,你还可以与玩家互动,分享自己的创意,相互交 ...
- 我的世界海洋java_我的世界Java版开发者们畅聊水域更新
我的世界1.13水域更新将会是一次非常庞大的更新,该版本还在开发和设计中,想了解开发者们将会在海洋世界里添加什么好玩有趣的内容吗?那就赶快来看看吧! [我的世界pc版交流群1]欢迎各位小伙伴加入!群号 ...
- 计算机术语桢什么意思,请问电脑丢帧严重的“丢帧”是啥意思哦?
光学鼠标的光学传感器就像一个摄像机,它连续的高速的对定位平面进行拍照(或者说录像).这种拍照是在一个固定频率上的(有人叫它刷新率,有人叫它扫描频率,都是一样,这里就叫它扫描频率了),并且每帧画面有个尺 ...
最新文章
- C语言文件操作函数大全
- SharePoint 【架构系列】-- SharePoint的处理(Process)与执行模型(Trust Model) 01
- Html5本地存储和本地数据库
- JSON学习笔记(二)- 对象
- 最好的FLV视频下载器 维棠 (支持优酷视频下载、土豆视频下载等)
- java aio聊天_JAVA aio简单使用
- leetcode 215. 数组中的第 K个最 大的元素(堆排序,C语言)
- 2019央视春晚公布主持阵容 语言类节目将有突破
- mysql 存储过程(提供查询语句并返回查询执行影响的行数)
- exchange 2003 event id 1221
- 没学好 Netty ,要凉?
- 编译HG255D的openwrt固件
- 阶段3 1.Mybatis_11.Mybatis的缓存_2 延迟加载和立即加载的概念
- 一起学Windows phone7开发(五.一个时钟的例子)
- 申请ARM DS-5单月试用版并安装
- 手机app注册登录服务器客户端流程图
- 杭州自己缴纳社保五险条件
- 3dmax建模如何设置凹凸贴图
- 学生学籍管理系统_学生登陆系统查询与修改信息
- halcon中如何生成椭圆_Halcon中关于角度计算和测量拟合的算子详解
热门文章
- 怎么做网线,网线水晶头接法和线序(图文详解)
- java多线程设计模式详解[推荐]
- sec^3 不定积分
- 【Allegro_SPB_16.6安装详细教程】手把手搭建到Win10
- cadence SPB17.4 - allegro - allegro_free_viewer
- 天河服务器维修,天河云服务器升级
- TX2安装opencv3.4.0
- ie收藏夹在电脑什么位置
- nodejs中生成uuid
- 【算法基础四】C语言小项目实战---通讯录管理系统(单链表)