统计
  • 建站日期:2019-12-01
  • 文章总数:2467 篇
  • 评论总数:2167 条
  • 分类总数:22 个
  • 最后更新:6月4日
文章 未分类

JAVA 蓝桥杯 约瑟夫环 LinkedList解法 带思路

程序员阿鑫
首页 未分类 正文


JAVA蓝桥杯约瑟夫环LinkedList解法带思路
-程序员阿鑫-带你一起秃头
-第1
张图片

题目:

n 个人的编号是 1~n,如果他们依编号按顺时针排成一个圆圈,从编号是1的人开始顺时针报数。

(报数是从1报起)当报到 k 的时候,这个人就退出游戏圈。下一个人重新从1开始报数。

求最后剩下的人的编号。这就是著名的约瑟夫环问题。

 

本题目就是已知 n,k 的情况下,求最后剩下的人的编号。

 

题目的输入是一行,2个空格分开的整数n, k

要求输出一个整数,表示最后剩下的人的编号。

 

约定:0 < n,k < 1百万

 

例如输入:

10 3

 

程序应该输出:

4

 

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms

 

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

 

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。

 

 

思路:


JAVA蓝桥杯约瑟夫环LinkedList解法带思路
-程序员阿鑫-带你一起秃头
-第2
张图片

JAVA蓝桥杯约瑟夫环LinkedList解法带思路 -程序员阿鑫-带你一起秃头 -第2 张图片

题目要求是说输入n和k两个数值,n的人编号从1开始,然后开始报数,报到k的人出局,然后剩下的人接着从一报数,以此类推....

我第一想到的是数组,然后试了试不方便,然后想到了跟数组差不多的list集合,由于ArrayList集合不适合于频繁修改,所以选择使用LinkedList,

不知道LinkedList的同学可以去看我之前发的集合文章:http://www.cxyax.com/?post=102

 

代码:

  1. public class MainY {
  2. /**
  3. * 标题:约瑟夫环
  4. * @author ah xin
  5. *
  6. */
  7. public static void main(String[] args) {
  8. Scanner sc = new Scanner(System.in);
  9. long n = sc.nextInt();
  10. long k = sc.nextInt();
  11. LinkedList list = new LinkedList(); //长修改删除用LinkedList
  12. for(int i = 1; i <= n;i++) {
  13. list.add(i);
  14. }
  15. int count = 1; //报数
  16. while(list.size() > 1) {
  17. if(count == k) {
  18. count = 1;
  19. list.removeFirst(); //移除并返回此列表中的第一个元素。
  20. }else {
  21. // Object a = list.removeFirst();
  22. // list.add(a);
  23. list.add(list.removeFirst()); //把没有移除的元素添加到数组最后再次循环报数
  24. count++;
  25. }
  26. }
  27. System.out.println(list.getLast());
  28. }
  29. }

以上是《JAVA 蓝桥杯 约瑟夫环 LinkedList解法 带思路》的全部内容,

感谢您对程序员阿鑫博客的支持!

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
这篇文章最后更新于2020-10-14,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
JAVA 蓝桥杯算法 全排列 背公式即可
« 上一篇
好程序员大数据处理+人工智能课
下一篇 »

发表评论


扫一扫,支付10
支付完成后,请等待5秒左右。手机请点此支付!