约瑟夫环的问题---最后剩下哪一个
来源:互联网 发布:展板设计制作软件 编辑:程序博客网 时间:2024/05/16 06:29
题意描述:1,……,n这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里面删除第m个数字。求这个圆圈中最后剩下的一个数字
解题思路一:模拟一个环,然后每次删除第m个数字
解题思路二:上述思路可行,但明显时间复杂度O(mn)。因此还是希望找找删除数字有什么规律。
递归公式: 0 , n = 1
f(n,m)= {
[f(n-1,m)+m] % n , n > 1
import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class LastNumberInCircle {//解题思路一:模拟一个环,然后每次删除第m个数字,暴力破解private static int LastRemaining(int n, int m) {if(n < 1 || m < 1)return -1;List<Integer> list = new ArrayList<Integer>();for(int i=0; i<n; i++)//list中添加1-n个编号list.add(i+1);int index = -1;//需要淘汰的编号while(list.size()>1){//循环结束的条件是环内只有1人index = (index + m) % list.size();System.out.println(list.get(index));list.remove(index--);}return list.get(0);}//解题思路二:上述思路可行,但明显时间复杂度O(mn)。因此还是希望找找删除数字有什么规律。//递归公式: 0 , n = 1 // f(n,m)= { // [f(n-1,m)+m] % n , n > 1private static int LastRemaining2(int n, int m){if(n < 1 || m < 1)return -1;int last = 0;for(int i=2; i<=n; i++)last = (last + m) % i;return last+1;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){int n = sc.nextInt();int m = sc.nextInt();System.out.println(LastRemaining(n, m) + "\t" + LastRemaining2(n, m));}}}
0 0
- 约瑟夫环的问题---最后剩下哪一个
- 圆圈中最后剩下的数字(约瑟夫环问题)
- 圆圈报数最后剩下的数 约瑟夫环问题 Joseph
- 圆圈中最后剩下的数字(约瑟夫环问题)
- 圆圈中最后剩下的数字(约瑟夫环问题)
- 圆圈中最后剩下的数字(约瑟夫环问题)
- 圆圈中最后剩下的数字(约瑟夫环问题)
- 圆圈中最后剩下的数字(约瑟夫环问题)
- 约瑟夫问题(圆圈中最后剩下的数)
- 孩子们的游戏(圆圈中最后剩下的数)--约瑟夫环问题
- 孩子们的游戏(圆圈中最后剩下的数)(约瑟夫环问题)
- 剑指offer — 孩子们的游戏(圆圈中最后剩下的数)约瑟夫环问题
- 【数学】约瑟夫环问题中,最后剩下的人是第几个人
- 【剑指Offer学习】【面试题45:圆圈中最后剩下的数字(约瑟夫环问题)】
- 剑指offer面试题 圆圈中最后剩下的数字(约瑟夫环问题)
- 剑指offer(49):约瑟夫环问题(圆圈中最后剩下的数字)
- 面试题45:圆圈中最后剩下的数字(约瑟夫环问题)
- 《剑指offer》:[45]圆圈中最后剩下的数字(约瑟夫(Josephuse)环问题)
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- caffe代码阅读:SyncedMemory和Blob
- Eclipse 重复/撤销框架---转载自(IBM 田晨的文档)
- 伪类 :after和:before介绍
- sublime text实现函数跳转(window环境)
- 约瑟夫环的问题---最后剩下哪一个
- linux硬链接与软链接
- CAS和vector clock笔记
- hive调优 ------- 竖表变横表
- javabean(实体类)转Map类型
- Asynctask线程阻塞问题
- Oracle入门基础理论
- WEB项目中判断当前请求是否为Ajax请求
- mysql 左连接